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 然后點擊發布。重啟couponhttp://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