ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ***** # 1. 引入配置服务器的架构 ![](https://img.kancloud.cn/8f/56/8f5697c6b206853136def735a62efe20_613x379.png) # 2. 使用Nacos管理配置 ``` 第一步: 加依赖 compile('org.springframework.cloud:spring-cloud-starter-alibaba-nacos-config') 第二步: 写配置 约定大于配置, 创建 bootstrap.yml, 添加配置 spring: profiles: active: dev application: name: ali-user-service cloud: nacos: config: server-addr: localhost:8848 namespace: 43dc7240-b605-44b9-8885-045fab030832 file-extension: yaml ``` ![](https://img.kancloud.cn/fa/14/fa142d7bf77c7a75945164491efccfda_854x359.png) ``` @RestController public class TestNacosConfigController { @Value("${my.configuration}") private String myConfiguration; @GetMapping("/test-config") public String testMyConfig() { return myConfiguration; } } ``` ![](https://img.kancloud.cn/27/d7/27d7aedf7700ca23a9f41d265092c10a_970x736.png) # 3. 配置属性动态刷新与回滚(附回滚Bug) ``` 目标: 修改配置中心中的内容,不需要重启服务 (@RefreshScope) ``` ``` 修改代码: @RestController @RefreshScope public class TestNacosConfigController { @Value("${my.configuration}") private String myConfiguration; @GetMapping("/test-config") public String testMyConfig() { return myConfiguration; } } ``` ``` 回滚的bug(将会在1.2版本修复) 问题描述: 点击历史列表--回滚到初始状态,配置列表中的配置数据会丢失,目前建议不要回滚到初始状态 或者可以直接修改配置列表中的数据可以规避该问题 ``` ![](https://img.kancloud.cn/07/48/0748515f14ecfe201cb96995b60e404b_765x503.png) # 4. 应用的配置共享 ``` ali-user-service-dev.yaml 指定专用配置; ali-user-service.yaml 指通用配置, 专用配置优先级 大于 通用配置优先级 ``` ![](https://img.kancloud.cn/4f/61/4f61589cc3c8a6daeccccc3622328800_789x162.png) ``` 1. 多个微服务共享配置 -> 自动方式(根据[应用名-环境名].yaml方式) spring: profiles: active: dev application: name: ali-user-service cloud: nacos: config: server-addr: localhost:8848 namespace: 43dc7240-b605-44b9-8885-045fab030832 file-extension: yaml ``` ``` 2. 多个微服务共享配置 -> shared-dataids 方式 # 配置管理 spring: profiles: active: dev application: name: ali-user-service cloud: nacos: config: server-addr: localhost:8848 namespace: 43dc7240-b605-44b9-8885-045fab030832 file-extension: yaml # 共享配置的DataId, 多个使用,分隔 # 越靠后,优先级越高; common2.yaml > common1.yaml # .yaml后缀不能少,只支持yaml/properties shared-dataids: common1.yaml,common2.yaml # 哪些共享配置支持动态刷新,多个使用,分隔 refreshable-dataids: common1.yaml ``` ``` 3. 多个微服务共享配置 -> ext-config 方式 spring: profiles: active: dev application: name: ali-user-service cloud: nacos: config: server-addr: localhost:8848 namespace: 43dc7240-b605-44b9-8885-045fab030832 file-extension: yaml # 共享配置的DataId, 多个使用,分隔 # 越靠后,优先级越高; common2.yaml > common1.yaml ext-config: - data-id: common1.yaml # common1.yaml所在的group group: DEFAULT_GROUP # 是否允许刷新, 默认false refresh: true - data-id: common2.yaml group: DEFAULT_GROUP refresh: true ``` ``` 总结: 三种方式的优先级 shared-dataids < ext-config < 自动 ``` # 5. 引导上下文 ``` 1. bootstrap.yml 就是引导上下文的文件,使用连接nacos的,读取外部配置; 2. 引导上下文是Application Context的父上下文,因此profiles和application属性要放在bootstrap.yml中; 3. 默认远程配置 [优先级 大于 本地配置优先级],即 bootstrap > application 可以通过下方属性修改优先级,注意该配置需要放到远程的nacos控制台中的属性位置才能生效 ``` ![](https://img.kancloud.cn/67/52/67522cce8092609c7fab6b2e24980a3f_790x332.png) # 6. 数据持久化 ``` 1. nacos作为服务发现组件数据是存放在本地的 /nacos/naming 中; 2. nacos作为配置服务器 配置数据: 存放在 $NACOS_HOME/data/derby-data 中(derby是Apache内嵌数据库); 快照: /nacos/config ``` # 7. 搭建生产可用的Nacos集群 ``` 用mysql代替derby 参考: http://www.imooc.com/article/288153 ```