整合配置中心nacos
应用场景,每次改配置要重新启动才能生效,而把配置放到nacos上,如有修改,那么发布后项目自动就生效了。
场景2:不同微服务单独设置一个命名空间。
一、项目操作
1.引入依赖
<!--使用spring-cloud-alibaba-nacos做配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
不用加版本号,因为在此基础上引入的cloud依赖中统一规定了版本号
<!--spring-cloud-alibaba组件包管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${springcloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<springcloud.alibaba.version>2.2.2.RELEASE</springcloud.alibaba.version>
</properties>
2.配置文件
resource目录下新建bootstrap.properties,它优先于application.properties被加载,
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
注意上面的config.server了。
3.传统方式获取application.properties里的值
@Value("${xxx.xxxx.xxx……}")
一旦修改,那就得重启项目,不方便。
二、在nacos上配置
1.创建配置
2.编写配置
id默认是项目名.properties。
然后不要忘了,Controller头部加注解
@RefreshScope
表示动态刷新。
3.测试
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private Integer age;
@RequestMapping("/test")
public R test(){
return R.ok().put("name",name).put("age",age);
}
然后项目保持启动,去修改nacos里的配置,并发布,再刷新页面,值就变了。
4.总结
三、细节
1.命名空间
2.1命名空间:配置隔离;
* 默认:public(保留空间),默认新增的所有配置都在public空间
* 然而,环境有开发、测试、生成等等,命名空间不应相同。
可以切换环境
把public里的配置克隆到pro,改变里面的值。这样,同一配置,不同环境下,存在多个。那想切换命名空间咋办:bootstrap.properties
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=a82dae20-3e6e-47c0-a5dd-81ad974725e7
新加了一行,规定命名空间,字符串的值就是:
2.配置分组
即便是同一个命名空间也是可以分配多个组的,
可以这样:每个微服务创建自己的命名空间,然后每个环境在不同的group
而且,有些一般项目的配置内容也不是只存在一个配置文件,那样很乱,关于数据源的一般放在一个文件,等等……
3.加载多配置集
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=a82dae20-3e6e-47c0-a5dd-81ad974725e7
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true #自动刷新
spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true
另外依然会读取项目名.properties