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