代码读写、监听nacos配置中心的方案,请移步 https://blog.csdn.net/rocklee/article/details/124006422
确定版本依赖在parent里面定义好boot/cloud/alibaba的版本:
这里用的boot是2.4.2,springcloud的版本是2020.0.5,alibaba cloud的版本是2021.1算是不落伍吧。
服务模块pom引入org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring-alibaba-cloud.version} pom import
parent的依赖版本约定已经定义好,那么在其他服务模块中直接引用依赖即可,因为我是同时用nacos作用自治中心和配置中心,所以引入nacos-config和nacos-discovery两个依赖
配置bootstrap.ymlorg.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-bootstrap com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.cloud spring-cloud-starter-loadbalancer
bootstrap配置文件优先度最高,bootstrap可以通过bootstrap的配置文件动态从配置中心加载配置再做后面的初始化,这里做测试的只是将一个应用类的配置放在配置中心,其他还是放在本地,具体:
server:
tomcat:
accept-count: 800 #如果max线程都满负载工作,还能接受多少排队任务
threads:
max: 200 #最大线程数
min-spare: 12 #核心线程数
max-connections: 5000
port: 2000
spring:
#main: #不引用org.springframework.boot:spring-boot-starter-web就好
# web-application-type: none
application:
name: ${services.account-service}
profiles:
include: jdbc,config
#active: prod
output:
ansi:
enabled: always
cloud:
inetutils:
preferred-networks: 128.30
nacos:
username: seata
password: seatapass
config:
server-addr: ${nacos.server-addr}
#文件扩展名默认就是properties,还可以是yaml
file-extension: yml
refresh-enabled: true
#name: spec-config.yml
discovery:
server-addr: ${nacos.server-addr}
service: ${services.account-service}
本地也针对应用配置类有相应的配置参数
默认的data id是
s
p
r
i
n
g
.
a
p
p
l
i
c
a
t
i
o
n
.
n
a
m
e
+
"
−
"
+
{spring.application.name}+"-"+
spring.application.name+"−"+{spring.profiles.active}+“.”+${spring.cloud.nacos.config.file-extension}
比如从上面的配置,对应的nacos data id 为easy-cloud-account-service.yml,因为未指定active. 那么可以加入此配置
记得加上@RefreshScope,这要告诉nacos config客户端从配置中心取回数据刷新
@Configuration
@ConfigurationProperties(prefix = "sample")
@RefreshScope
public class NacosConfigSampleP {
private String staff;
private int age;
}
在controller上加上
@Override
public NacosConfigSample getConfig() {
NacosConfigSample sample=new NacosConfigSample();
//因为nacosConfigSample已经被 代理,多了很多不能序列化的对象,故要转换
BeanUtils.copyProperties(nacosConfigSample,sample);
return sample;
}
测试
当修改了nacos配置中心的参数,立即会反应到nacosConfigSample



