Nacos数据库持久化
1、创建数据库结构
执行nacos\conf目录下有一个nacos-mysql.sql的数据库脚本
2、修改配置文件配置
修改nacos\conf目录下的application.properties文件
#*************** Config Module Related Configurations ***************#
### If user MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB: 单实例配置
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://10.0.0.45:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
### Count of DB: 集群实例配置
#db.num=2
### Connect URL of DB:
#db.url.0=jdbc:mysql://10.0.0.45:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
#db.url.1=jdbc:mysql://10.0.0.46:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
#db.user=root
#db.password=root
Nacos集群配置
1.创建3个nacos节点
2. 修改节点下\conf\application.properties配置
### Specify local server's IP:
nacos.inetutils.ip-address=127.0.0.1
3.每个节点下添加cluster.conf文件
#每个节点的ip
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850
4.启动nacos
-
windows下需要修改startup.cmd脚本内容
将if判断内的参数调换,默认使用集群模式启动
if %MODE% == "standalone" ( set "JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" set "JAVA_OPT=%JAVA_OPT% -XX:-OmitStackTraceInFastThrow XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof" set "JAVA_OPT=%JAVA_OPT% -XX:-UseLargePages" ) else ( set "JAVA_OPT=%JAVA_OPT% -Xms512m -Xmx512m -Xmn256m" set "JAVA_OPT=%JAVA_OPT% -Dnacos.standalone=true" )
-
linux下命令启动
sh startup.sh -m cluster
5.成功启动后截图
6. 服务注册nacos集群
注意:加载配置中心的资源文件必须为bootstrap.yml,否则无法加载nacos配置文件
spring:
cloud:
nacos:
discovery:
# 也可以通过域名+vip绑定多个实例的ip和端口
server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
Nacos配置中心
1.引入nacos配置依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.Nacos配置中心创建配置文件
Nacos下Data Id有默认的生成规则
${prefix}-${spring.profile.active}.${file-extension}
- prefix默认为spring.application.name的值,也可以通过spring.cloud.nacos.config.prefix来指定
- spring.profile.active为空时,对应的连接符"-"也将不存在,dataId格式变为
${prefix}.${file-extension}
- file-extension为配置内容的数据格式,通过spring.cloud.nacos.config.file-extension来配置。目前只支持properties和yaml类型。
spring:
application:
# 服务实例名称
name: lagou-service-resume
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
config:
server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
# 文件后缀
file-extension: yaml
# 命名空间
namespace: b8be4061-13d1-485b-8d59-f4633552b847
# 配置文件所属分组
group: DEFAULT_GROUP
# 读取多个配置文件
ext-config[0]:
data-id: abc.yaml
ext-config[1]:
data-id: def.yaml
3.代码示例
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
// 和取本地配置信息⼀样
@Value("${lagou.message}")
private String lagouMessage;
@Value("${mysql.url}")
private String mysqlUrl;
@Value("${abc.test}")
private String abc;
@Value("${def.test}")
private String def;
@GetMapping("/viewconfig")
public String viewconfig() {
return "lagouMessage==>" + lagouMessage + " mysqlUrl=>" + mysqlUrl
+ " abc=>" + abc+ " def=>" + def;
}
}
4.管理基础配置数据
在不同环境的配置文件普遍存在固定的配置项,例如:spring.application.name=lagou-service-resume。对于这种基础的全局配置,我们将其存放到单独的lagou-service.yml文件中。因为不带环境名的配置文件必然会被加载。
5.配置文件优先级
-
lagou-service-resume.yaml
-
abc.yml
-
def.yaml
测试结果
当主配置类文件和扩展配置类文件同时拥有${lagou.message}参数时候以主配置类文件信息为准
当多个扩展配置类拥有${def.test}参数时,根据ext-config中的配置顺序,顺序越靠后的优先级越高
6.配置热加载原理
Nacos采用的是Pull拉取模式。
是一种长轮训机制。客户端采用长轮询的方式定时发起pull请求去检查服务端配置是否发生了变更,如果变更了,客户端会获取最新的配置。
简单来说就是,客户端发起轮训请求后,服务端有配置发生变化,就直接返回。
如果客户端发起Pull请求后,服务端和客户端配置一致,服务端拿到该链接后在指定时间内会一直不返回结果,直到服务端配置发生变更才回返回。