Nacos配置中心

我们还可以用nacos作为配置中心。
配置中心的意思是不在application.properties
等文件中配置了,
而是放到nacos配置中心公用,这样无需每台机器都改。
11.1 引入配置中心依赖,放到common中
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>
 
11.2 在coupons项目中创建/src/main/resources/bootstrap.properties 
这个文件是springboot里规定的,
他优先级别比application.properties高
#改名字,对应nacos里的配置文件名
spring.application.name=glmall-coupon
spring.cloud.nacos.config.server-addr=192.168.100.106:8848
11.3 Controller里编写@Value属性赋值
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {

    @Autowired
    private CouponService couponService;
    @Value("${coupon.user.name}")//从application.properties中获取//不要写user.name,他是环境里的变量
    private String name;
    @Value("${coupon.user.age}")
    private Integer age;
   //测试nacos配置中心配置
  @RequestMapping("/test")
   public R test(){
        return R.ok().put("name",name).put("age",age);
    }
}
11.4 浏览器去nacos里的配置列表配置
点击+号,data ID(数据集):glmall-coupon.properties(与bootstrap.properties 里配置的application名称对应的properties,配置
coupon.user.name="张三"      
coupon.user.age=12

11.5 然后点击发布。重启coupon
http://localhost:7000/coupon/coupon/test
{"msg":"success","code":0,"name":"张三","age":12}
11.6 动态获取配置
但是修改肿么办?实际生产中不能重启应用。
在coupon的控制层上加
@RefreshScope
最终代码如下
@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;

    @Value("${coupon.user.name}")//从application.properties中获取//不要写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浏览器里修改配置,修改就可以观察到能动态修改了
nacos的配置内容优先于项目本地的配置内容。

如果配置中心和项目的配置文件都配置了相同项目,则优先使用配置中心的配置项

11.7 命名空间
默认是public的命名空间。
在项目的bootstrap.properties里配置对应命名空间
spring.cloud.nacos.config.namespace=b176a68a-6800-4648-833b-be10be8bab00  

一些概念:
1)命名空间:配置隔离;
       默认:public(保留空间):默认新增的所有配置都在public空间。
       1.开发,测试,生产:利用命名空间来做环境隔离。
          注意:在bootstrap.properties 配置上,需要使用哪个命名空间下的配置。
          spring.cloud.nacos.config.namespace=9ec62e44-cd2a-4a82-bf5c-95878bd5c871
       2.每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置
2)配置集:所有的配置的集合
3)配置集ID:类似文件名
     Data ID:文件名
4)配置分组:
     默认所有的配置集都属于:DEFAULT_GROUP; 1111 618
     每个微服务创建自己的命名空间,使用配置分组区分环境 dev test prod

加载多配置集
我们要把原来application.yml里的内容都分文件抽离出去。我们在nacos里创建好
后,在coupons里指定要导入的配置即可。
bootstrap.properties
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=192.168.11.1:8848
spring.cloud.nacos.config.namespace=ed042b3b-b7f3-4734-bdcb-0c516cb357d7  # # 可以选择对应的命名空间 ,即写上对应环境的命名空间ID
spring.cloud.nacos.config.group=dev  # 配置文件所在的组
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true
spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true
datasource.yml
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.1.103:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: root
mybatis.yml
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
other.yml
spring:
  application:
    name: gulimall-coupon
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.11.1:8848
server:
  port: 7000