nacos做配置中心
应用场景:
当你在application.properties里面设置一些变量值value的时候,在项目中也进行使用了。
但是项目上线之后,突然发现需要修改配置文件的value值。那你必须要修改然后重新打包上线,就很麻烦,也会浪费重新上线的时间,nacos config就可以在平台上去注册配置,然后动态的修改就可以了,会同步修改项目中使用到的配置value值,可以避免重新打包上线项目。
使用步骤
1、导入依赖
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-bootstrapartifactId>
- dependency>
2、bootstrap.properties(必须用bootstrap,官方规定)
- coupon.user.name=我是上线用户1
- coupon.user.age=18
- spring.application.name=CouponMoudle
3、application.yml
- # mysql
- spring:
- datasource:
- #MySQL配置
- driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/gulimail_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
- username: root
- password: 111111
- cloud:
- nacos:
- discovery:
- server-addr: 127.0.0.1:8848 #Nacos服务注册中心地址
- config:
- server-addr: 127.0.0.1:8848 #Nacos作为配置中心地址
- application:
- name: CouponMoudle
-
- mybatis-plus:
- mapper-locations: classpath:/mapper/**/*.xml
- global-config:
- db-config:
- id-type: auto
-
-
- server:
- port: 8000
4、 CouponController使用配置value
- @RefreshScope //开启动态刷新
- @RestController
- @RequestMapping("coupon/coupon")
- public class CouponController {
- @Autowired
- private CouponService couponService;
-
- @Value("${coupon.user.name}")
- private String name;
- @Value("${coupon.user.age}")
- private Integer age;
-
- @RequestMapping("/user/test")
- public R test(){
- return R.ok().put("name",name).put("age",age);
- }
- }
注意:启动类上记得加@EnableDiscoveryClient,这里是默认项目已经搭建好了,主要是如何在项目中使用nacos做配置中心
5、在配置中心添加配置


Data ID的配置:
完整格式:${prefix}-${spring.profiles.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active 即为当前环境对应的 profile 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
因为我配置了spring.application.name,前缀就是name,后缀是配置文件格式,自己选择,也可以配置。


6、动态修改配置,无需重启!



刚刚我们添加了的配置都会默认public(保留空间)。

但是开发中肯定都是多环境生成开发。
命名空间就可以实现配置隔离
默认: public(保留空间);默认新增的所有配置都在public空间。其他环境:开发,测试,生产
配置集
配置集ID配置分组
第一步,新增命名空间
id可以自己配置,不配置会随机生成

我们在dev环境下也编写一个配置

然后我们再去启动Coupon服务,这时候我们没有任何配置,它还是会默认去加载public环境下的配置文件。但是我们如果上线了要想让他去加载dev的配置文件,怎么做呢?
第二步,配置springboot配置文件
很简单,在springboot里面配置

spring.cloud.nacos.config.namespace=1164213208 #命名空间id
命名空间必须在bootstrap里面配置,这就是官方规定!不能在application里面配置!
启动后,发现它读取的就是dev环境下的配置

当然我们除了可以区分生产环境的命名空间,也可以区分项目,看自己需求。
扩展:分组
nacos配置文件也可以配置分组

在springboot里面配置使用就是
spring.cloud.nacos.config.group=111
我们可以定义一个某个节日例如双十一分组,在当天就使用那个分组的配置,也很方便