docker中搭建nacos并将springboot项目的配置文件转移到nacos中
前言
网上搜索docker中搭建nacos发现文章不是很好理解,正好最近在搭建nacos练手。记录一下整个搭建过程。文章最后附上了一些过程中遇到的问题,大家可以按需要查看。
docker中搭建nacos并将springboot项目的配置文件转移到nacos中
- 前言
- 1 docker中下拉nacos镜像
- 2 配置nacos信息
- 1. 创建docker的挂载目录,实现数据的持久化
- 2. 复制nacos默认配置文件到宿主机的挂载目录中
- 删除容器
- 3 启动nacos
- 4 配置nginx映射nacos配置后台
- 5 配置nacos开启登录验证
- 开始配置
- 6 配置数据库
- 7 项目中配置nacos
- nacos配置
- 数据库是mongdb
- mysql数据库项目
- 8 效果图
- 其它问题
- vim问题
- nacos版本问题
- vim打开配置文件之后粘贴不进去
- 初始化数据库
- 权限认证失败
- 新建命名空间失效
1 docker中下拉nacos镜像
下拉镜像(这里不下拉也ok,后面执行run的时候没有就自己去下拉了)
docker pull nacos/nacos-server:v2.4.2
我本来下拉的时候没有加版本号也就是默认下拉了最新的,但是启动报错说java版本不适配。所以这里指定了版本。

拉下来之后可以通过以下命令查询docker中的镜像
docker images
2 配置nacos信息
1. 创建docker的挂载目录,实现数据的持久化
创建挂载目录 新建logs目录
mkdir -p /mydata/nacos/logs/
新建conf目录
mkdir -p /mydata/nacos/conf/
2. 复制nacos默认配置文件到宿主机的挂载目录中
因为需要使用到nacos中的默认配置文件,如果直接将宿主机的目录挂载到docker容器中,会导致宿主机的空目录覆盖容器原本的默认配置文件。因此 我们需要先不挂载目录启动一下容器,将配置文件拷贝出来。然后再挂在启动容器。
否则会报如下错误:找不到nacos-logback.xml文件。

启动容器
docker run -p 28848:8848 --name nacos -d nacos/nacos-server:v2.4.2
复制文件
cp nacos:/home/nacos/logs/ /mydata/nacos/
cp nacos:/home/nacos/conf/ /mydata/nacos/
复制完可以在宿主机中查看目录中的东西,如下,已经存在上面报错找不到的nacos-logbask.xml文件

删除容器
刚刚创建的容器只是为了拷贝出默认的配置文件,这里就需要把容器停止,删除,然后重新创建。
可以使用-f参数,强制删除。如果不添加-f 则只能删除停止运行的容器
docker rm -f nacos
3 启动nacos
- 创建容器(复制一下命令执行即可)
docker run -d --name nacos -p 28848:8848 --privileged=true -e MODE=standalone -v /mydata/nacos/logs/:/home/nacos/logs -v /mydata/nacos/conf/:/home/nacos/conf/ --restart=always nacos/nacos-server:v2.4.2
参数解释:
-d:表示容器后台运行,启动之后会返回一个容器id
-p:注意我这里使用了宿主机的28848端口 是将容器的8848端口映射到28848端口,为什么不用宿主机的8848端口这样做主要是防止网络上的恶意攻击。
--privileged:true表示容器以特权模式运行,表示容器可以执行一些通常受限的操作。
-e MODE=standalone:表示nacos为单机模式运行,默认是集群方式运行 参数为:cluster。
-v: 就是将容器里面两个重要的文件夹映射到我们宿主机上刚刚创建的两个文件夹中。方便我们操作管理。
--restart always: 表示容器如果意外关闭,docker会自动重启该容器。
nacos/nacos-server:是指镜像名称,就是我们第一步下拉下来的镜像名字。
启动完成之后可以查看一下docker容器的情况,如下

4 配置nginx映射nacos配置后台
查找宿主机上的nginx.conf文件位置
find / -name nginx.conf
找到配置文件路径之后使用vim打开编辑
vim /你找到的路径/nginx.conf
在配置文件中添加以下配置信息
location ~ (^/nacos).* {proxy_pass http://127.0.0.1:28848;#proxy_set_header Host $host:$server_port;}
配置之后保存
检查配置文件格式是否正确
nginx -t

然后重启nginx
sudo nginx -s reload
注意命令前加sudo 防止nginx重启的时候没有完全重启,导致配置一直不生效。
sudo: 以root权限执行此命令。因为nginx涉及到重要资源的配置如果端口443 8080。这些资源一般只有root用户或者设置的其它具备管理权限的用户才可以操作。因此防止启动不生效最好添加上。笔者之前因为不添加这个排查过很多次nginx启动了还不生效的问题(很多时候是关闭没有关闭掉,有启动了多个nginx。相互之间影响导致不生效)
外网访问 输入你的域名或者ip+ /nacos 即可看到 如:http://127.0.0.1:28848/nacos/
5 配置nacos开启登录验证
此时已经可以正常启动了

但是正常项目中一定是需要鉴权(登录校验等)的。所以下面通过配置application.properties文件开启登录验证
我在这一步遇到很多问题,
启动之后如果大家也遇到问题可以进入到我们配置的log目录中查看具体的报错信息
tail -f /mydata/nacos/logs/nacos.log
配置大部分是操作application.properties 文件,我这里附上一份我已经亲测好的配置文件。里面#中文提示的需要改成你的环境配置,具体修改方法看下面操作步骤
# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8848}
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.error.include-message=ALWAYS
# default current work dir
server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}
# 这里改成使用的数据库************************************************************************
spring.sql.init.platform=mysql
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=falsedb.num=${MYSQL_DATABASE_NUM:1}
# 数据库的连接************************************************************************
db.url.0=jdbc:mysql://你的ip地址:23306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
# 数据库的账号************************************************************************
db.user.0=heibaike
# 数据库的密码************************************************************************
db.password.0=password# db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
# db.user.0=${MYSQL_SERVICE_USER}
# db.password.0=${MYSQL_SERVICE_PASSWORD}
## DB connection pool settings
db.pool.config.connectionTimeout=${DB_POOL_CONNECTION_TIMEOUT:30000}
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### The default token:
# 你生成的的base64密钥************************************************************************
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:PQdq6s7A13******zJKcok1yyvBnSuELY=}
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
# 服务端认证需要的key************************************************************************
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:liulu}
# 服务端认证需要的value************************************************************************
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:liulu}
# 开启鉴权************************************************************************
nacos.core.auth.enabled=true
# 你自定义的用户名************************************************************************
cos.core.auth.username=username
# 你自定义的密码************************************************************************
nacos.core.auth.password=password## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.console.ui.enabled=true
nacos.core.param.check.enabled=true
开始配置
- 我在配置文件application.properties 中开启鉴权
nacos.core.auth.enabled=true
之后重启镜像报错说没有生成合适的token
- 然后我又在配置文件中修改了
nacos.core.auth.plugin.nacos.token.secret.key=yoUNZzcOU/x/0T**********He3tJgq1oVobClEvdUg=
这个值需要大家自己生成一个合适的Base64编码密钥,可以通过一下方法生成
import java.util.Base64;public class Main {public static void main(String[] args) {String secret = "your-32-byte-long-secret-key";String base64Encoded = Base64.getEncoder().encodeToString(secret.getBytes());System.out.println(base64Encoded);}
}
运行上述代码并将输出的 Base64 编码密钥放入配置文件中。
然后重启镜像说没有nacos.core.auth.server.identity.key
3. 配置nacos.core.auth.server.identity.key
默认的如下:
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:}
这里只需要在参数中:后面自定义值就可以,如下
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:heibaike}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:wanghaixin}
然后保存文件 重启docker容器
docker restart nacos
搞定!

6 配置数据库
之前已经正常运行起来,但是数据库使用的是nacos内置的数据库,可能会有数据丢失的风险,这里演示如何使用外部数据库
我使用的是mysql数据库,这里演示数据库配置
在数据库中创建数据库nacos_config
然后在数据库中执行 /mydata/nacos/conf/ 目录中的mysql-schema.sql和 1.4.0-ipv6_support-update.sqlsql文件生成初始数据库。
然后编辑 /mydata/nacos/conf/ 目录中application.properties
db.url.0=jdbc:mysql://182.***.72:3306/nacos_config?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
db.user.0=root
db.password.0=123456
如上设置自己的账号密码,注意如果是在mysql服务在同一个电脑上不可以使用127.0.0.1或者localhost。
因为在docker容器中,127.0.0.1或者localhost代表的是容器本身的网络,而不是宿主机的网络,因此这里使用宿主机的真实ip
配置完成之后重启dockers容器
docker restart nacos
这块我配置的过程中不知道哪里写错了还是怎的,我猜测是因为向服务器上面复制的时候意外粘贴到了vim的命令行中,触发了某些参数,导致我复制的时候复制不进去,并且会改文件中的文件,导致怎么都运行不起来了。如果大家也遇到看不出来的问题也通过复制上面完整的配置文件放到本地重新赋值里面的环境,再把配置文件上传到服务器上解决问题
7 项目中配置nacos
nacos配置
nacos配置中创建命名空间

点击命名空间

创建配置

数据库是mongdb
项目中 引入pom依赖
<!--bootstrap--><dependency><groupId>org.webjars</groupId><artifactId>bootstrap</artifactId><version>3.3.5</version></dependency><!--nacos配置--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.6.RELEASE</version></dependency>
resources目录下新建 bootstrap.yml
spring:application:# 确保这个与 Nacos 中的 Data ID 前缀保持一致name: application.ymlcloud:nacos:config:# Nacos 服务器地址server-addr: 39.99.$$.$$1:28848# 配置文件的格式file-extension: yaml# Nacos 中的 group 名称group: USER_GROUP# Nacos 中的 group 名称namespace: 01af5f95-0##2-##f1-ab99-b###bb6b082
注释掉原来的配置文件如application.yml
启动运行 搞定
mysql数据库项目
pom.xml中引入依赖
<!--bootstrap--><dependency><groupId>org.webjars</groupId><artifactId>bootstrap</artifactId><version>3.3.5</version></dependency><!--nacos配置--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.6.RELEASE</version></dependency><!-- 引入阿里数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.6</version></dependency>
引入配置文件bootstrap.yml
spring:application:name: springboot-nacosprofiles:active: devcloud:nacos:config:# 配置中心的地址server-addr: 127.**.0.**:8848# 配置文件prefixprefix: application.yaml# 配置文件的格式file-extension: yaml# 配置文件的环境group: USER_GROUP# 命名空间namespace: d88&&e-13%%d-47#b-b42e-cdc##2501273
引入配置文件:DruidDataSourceWrapper
package cn.wanghaixin.solution.config;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;@Configuration
@RefreshScope
public class DruidDataSourceWrapper extends DruidDataSource implements InitializingBean {
//这个对应这nacos配置的yaml中的数据库路径@Value("${spring.datasource.url}")private String url;@Value("${spring.datasource.username}")private String username;@Value("${spring.datasource.password}")private String password;@Value("${spring.datasource.driver-class-name}")private String driverClassName;private String passwordCallbackClassName;public void setMaxWait(int maxWait) {this.maxWait = maxWait;}public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) {this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;}public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) {this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;}@Overridepublic void setUrl(String url) {this.url = url;}@Overridepublic void setDriverClassName(String driverClassName) {this.driverClassName = driverClassName;}@Overridepublic void setPasswordCallbackClassName(String passwordCallbackClassName) {this.passwordCallbackClassName = passwordCallbackClassName;}@Overridepublic void afterPropertiesSet() throws Exception {// 如果未找到前缀“spring.datasource.druid”JDBC属性,将使用“Spring.DataSource”前缀JDBC属性。super.setUrl(url);super.setUsername(username);super.setPassword(password);super.setDriverClassName(driverClassName);super.setInitialSize(initialSize);super.setMinIdle(minIdle);super.setMaxActive(maxActive);super.setMaxWait(maxWait);super.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);super.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);super.setValidationQuery(validationQuery);super.setTestWhileIdle(testWhileIdle);super.setTestOnBorrow(testOnBorrow);super.setTestOnReturn(testOnReturn);super.setPoolPreparedStatements(poolPreparedStatements);super.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);super.setDbType(dbType);super.setPasswordCallbackClassName(passwordCallbackClassName);}
}
创建配置文件:NacosConfigConfiguration
package cn.wanghaixin.solution.config;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@EnableAutoConfiguration
@Configuration
public class NacosConfigConfiguration {@Bean(initMethod = "init")@ConditionalOnMissingBean@RefreshScopepublic DruidDataSource dataSource() {return new DruidDataSourceWrapper();}
}
注释掉原来的配置文件
8 效果图

其它问题
vim问题
可能是我在复制信息的时候,意外在命令模式输入了,导致我继续再编辑模式复制时,复制不上,并且会改变文件中原本有的内容。 尝试了很多方法都没有解决,为了进度,我暂时通过其它方式达到了目的。但是这个问题没有解决!!
有知道的小伙伴可以留言,还请赐教!!
nacos版本问题
我最开始下拉镜像的时候是直接下拉了官方最新的
docker pull nacos/nacos-server
运行竟然报一下错误,搜索了一下这个方法是java

vim打开配置文件之后粘贴不进去
我使用的是xshell 比如我复制了数据库的url粘贴到vim打开的文本时,光标在文本中进行了跳动,并没有粘贴进去我指定的内容。
问题原因:vim的自动缩进造成的
解决方法:
使用 :set paste命令
进入 Vim 后,输入 :set paste 并回车。
然后按 i 进入插入模式,尝试右键粘贴文本。
粘贴完成后,输入 :set nopaste 回到正常模式。
然后i 进入输入模式,然后粘贴即可
初始化数据库
报错: Invalid default value for ‘gmt_create’
在5.6.5之后的版本才能使用CURRENT_TIMESTAMP作为DATETIME的默认值,但是当前MySQL数据库的版本为5.5,CURRENT_TIMESTAMP只能作为TIMESTAMP的默认值。
可以通过一下命令查看数据库版本,进一步确定问题
SELECT VERSION();
解决方法
- 将datetime类型改为timestamp类型即可。
- 去掉DEFAULT CURRENT_TIMESTAMP即可。
权限认证失败
首次登录提示:
权限认证失败
没有 命名空间的访问权限!
不用管哈哈 。重新登陆就没有了
新建命名空间失效
配置文件中,指定初始化数据库类型的位置
spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}
显示调整为mysql
spring.sql.init.platform=mysql
相关文章:
docker中搭建nacos并将springboot项目的配置文件转移到nacos中
前言 网上搜索docker中搭建nacos发现文章不是很好理解,正好最近在搭建nacos练手。记录一下整个搭建过程。文章最后附上了一些过程中遇到的问题,大家可以按需要查看。 docker中搭建nacos并将springboot项目的配置文件转移到nacos中 前言1 docker中下拉na…...
概率论原理
智慧挺不喜欢我,他告诉我需要有耐心,答案在后面;而我总想马上得到答案;但它也会给我奖励,因为我总会自己去寻找答案 B站 大大的小番茄 普林斯顿微积分 PDF 一化儿 BILIBILI 泰勒展开式 知乎https://www.zhihu.com…...
MYSQL的安装和升级
MySQL的RPM安装通常分为不同的包,包括Server、Common、Client、Devel、Libs、Libs-compat、Test、Source,请写出上述每个包的功能。 Server:包含MySQL服务器的核心文件和服务。安装此包后可以运行MySQL数据库服务器。 Common:包…...
深入解析 RISC-V 递归函数的栈使用:以阶乘函数为例
在处理递归函数时,RISC-V 体系架构的寄存器数量有限。为了确保每次递归调用能正确保存和恢复寄存器的状态,栈(stack)提供了灵活的解决方案。本文将结合具体的汇编代码和递归的阶乘函数 fact 来讲解 RISC-V 中如何利用栈进行寄存器…...
【保研纪念】计算机保研经验贴——南大cs、复旦cs、中南cs
文章目录 一、个人情况二、经验总结三、夏令营情况1、南京大学计算机学院(5月31日-6月2日)2、复旦大学计算机学院(7月1日-7月4日)3、中南大学计算机学院(7月5日-7月7日)4、武汉大学计算机学院 四、预推免情…...
TopOn对话游戏魔客:2024移动游戏广告应如何突破?
TopOn对话游戏魔客:2024移动游戏广告应如何突破? 近年来,游戏广告投放的成本日益走高,ROI如何回正,素材如何创新等问题困扰着每一个广告主。在隐私政策的实施下,广告投放难度也在不断升级。 据data.ai发布…...
Chainlit集成LlamaIndex实现知识库高级检索(BM25全文检索器)
检索原理 BM25Retriever类是一个基于BM25算法设计的检索器,它主要用于从一组文档或节点中检索出与查询最相关的文档或节点。这个类的设计目的是为了提高文本检索的效率和准确性,尤其是在处理大量文本数据时。 BM25(Best Matching 25&#x…...
Dubbo入门案例
Dubbo 学习地址:Dubbo3 简介_w3cschool; 01-Dubbo入门案例 我们先来新建一个Dubbo的小案例来体验一下Dubbo的使用,我们先来创建一个springboot的项目。 1.1-zookeeper下载启动 在编写我们的入门案例之前,我们需要先去下…...
android设计模式的建造者模式,请举例
在Android开发中,建造者模式(Builder Pattern)是一种常用的设计模式,它主要用于构建复杂对象。建造者模式通过将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种模式特别适用于那些需要多个…...
【探索智谱AI的CogVideoX:视频生成的新前沿】
2024年8月6日,智谱AI宣布其开源视频生成模型CogVideoX,激发了开发者的创造力和对新技术的期待。 一、CogVideoX模型概述 CogVideoX 是一款先进的视频生成工具,可基于最长 226 个 token 的提示生成视频,时长可达 6 秒,…...
ant design vue做表单验证及form表单外验证、父子嵌套多个表单校验
1、form表单验证(若有时遇到输入框有值但是还是触发验证规则了,请检查form表单绑定正确吗、校验规则正确吗、表格数据字段名正确吗) <a-form:model"formState":label-col"{ span: 8 }":wrapper-col"{ span: 16 }":rules"rul…...
爱速搭百度低代码开发平台
爱速搭介绍 爱速搭是百度智能云推出的低代码开发平台,它灵活性强,对开发者友好,在百度内部大规模使用,有超过 4w 内部页面是基于它制作的,是百度内部中台系统的核心基础设施。 它具备以下功能: 页面制作…...
2024icpc(Ⅱ)网络赛补题E
E. Escape 思路: 可以看成 Sneaker 和杀戮机器人都不能在原地停留,然后杀戮机器人有个活动范围限制。如果 Sneaker 和杀戮机器人可以在原地停留,那么 Sneaker 到达一个点肯定会尽可能早,而且时间必须比杀戮机器人到达这个点短。那…...
mac怎么设置ip地址映射
最近开发的项目分为了两种版本,一个自己用的,一个是卖出去的。 卖出的域名是和自己的不一样的,系统中有一些功能是只有卖出去的版本有的,但我们开发完之后还得测试,那就需要给自己的电脑配置一个IP地址映射了…...
StringReader 使用 JAXB自动将 XML 数据映射到 Java 对象
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.StringReader; public class JAXBExample { public static void main(String[] args) { try { // 假设这是从某处获取的XML字符串 S…...
【系统架构设计师】专题:系统分析和设计
文章目录 一、处理流程设计1.1 流程表示工具1.2 业务流程重组BPR1.3 业务流程管理BPM二、系统设计三、人机界面设计四、结构化方法4.1 结构化分析(Structured Analysis,SA)。4.2 结构化设计(Structured Design,SD)。4.3 结构化编程(Structured Programming,SP)。4.4 数据库设…...
Lambda表达式(Java)
1.Lambda表达式 Lambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。 “->”(Lambda操作符)左边:Lambda表达式的所有参数。右边:Lambda体&#x…...
不同的子序列
题目 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “…...
CI24R1——精简版Si24R1,高性价比替代XN297开发资料
CI24R1为了减低用户的开发时间,将2.4G芯片开发出2.4G小模块,用户直接贴片调试,大大降低了开发时间跟生产工序。广泛应用在灯控、鼠标、玩具等智能物联网产品。 CI24R1小模块(内置天线) 是 2.4GHz 模块。该模块核心处理…...
MySQL递归查询笔记
目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询所有兄弟节点(同级节点) 六、获取祖先节点及其所有子节点 七、查询每个节点之间的层级关系 八、查询指定节点之间的层级关系 一、创建表…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
