市场上主流配置中心:Apollo(携程开源),nacos(阿里开源),Spring Cloud Config(Spring Cloud 全家桶成员,使用有些复杂)
作用: 集中管理配置信息,动态发布配置信息,提高服务的高可用
配置中心的配置及使用
添加配置依赖
config该依赖会启动一个定时任务,每隔30s就会向nacos服务发送请求,进行长轮询的方式获取配置中心的配置信息
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
application.yml的名字修改为bootstrap.yml(启动优先级最高),并添加配置中心配置
spring: application: name: sca-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 file-extension: yml # Configure the data format of the content, default to properties #logging: # level: # com.jt: debug
启动nacos,mysql,后端服务,访问服务,在nacos配置中心中进行配置:
(注意:如果配置文件和配置中心都配置,先读取配置中心的,再读取配置文件的,则配置文件中的内容会将配置中心中的内容覆盖,只有配置文件生效)配置中心中的配置保存到数据库中,nacos启动时,就会从数据库中读取
编辑测试类进行测试
@Slf4j @RestController public class ProviderLogController { @GetMapping("/provider/log/doLog01") public String doLog01(){//trace<debug<info<warn<error System.out.println("==doLog01=="); log.trace("===trace==="); log.debug("===debug==="); log.info("===info===="); log.warn("===warn==="); log.error("===error==="); return "log config test"; } }
@RefreshScope
@RefreshScope的作用是在配置中心的相关配置发生变化以后,能够及时看到类中属性值的更新(底层是通过重新创建Controller对象的方式,对属性进行了重新初始化)。@RefreshScope @RestController public class ProviderLogController{ //..... }
Nacos配置管理模型
Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境和⽣产环境。
Group:分组,每个命名空间中可以有很多分组,用于不同的环境: 春节,国庆节~。Service/DataId:某⼀个服务或配置集,一般对应一个配置文件。配置中心中指定使用的命名空间, 分组, 共享配置
spring: application: name: sca-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 file-extension: yml # Configure the data format of the content, default to properties # 命名空间 namespace: 83ed55a5-1dd9-4b84-a5fe-a734e4a6ec6d # 命名空间自动生成的id # 分组名 group: DEFAULT_GROUP_51 # Group, default is DEFAULT_GROUP # 共享配置 shared-configs[0]:#0表示是一个共享配置 data-id: app-public.yml refresh: true #默认false,共享配置更新,引用此配置的地方是否要更新
nacos中的具体配置很简单,就不一一截图
#秘钥对内容进行加密和解密时使用 app: secret: AAAA #是否开启本地缓存 useLocalCache: true
项目中在配置文件中指定profiles
spring: profiles: # 通过profiles指定不同环境下的配置 active: dev #bootstrap-dev.yml
常见异常
mysql中没有配置中心数据
配置中心配置格式不正确
程序中服务读取配置时,找不到配置