P23 启动Nacos配置管理中心

Nacos也可以作为配置中心,配置中心的意思是不在application.properties等文件中配置了,而是放到nacos配置中心公用,这样无需每台机器都改。

官方教程:https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md

在common项目中添加pom依赖(需要在discover之上)

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

在coupon项目resources中创建bootstrap.properties,配置 Nacos server 的地址和应用名,这个文件是SpringBoot里规定的,他优先级别比application.properties高。

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=gulimall-coupon

在application.properties文件中配置:

coupon.user.name=zhangsan
coupon.user.age=18

在com.atguigu.gulimall.coupon.controller.CouponController中添加测试代码@RequestMapping(“/test”)

//从application.properties中获取
    // 不要写user.name,他是环境里的变量
    @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);
    }

运行application后可以在coupon/coupon/test中获得返回的结果


使用nacos配置管理中心

2022-09-19 13:32:19.952  INFO 23500 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='gulimall-coupon.properties'}]}

启动服务的时候可以看到在读取nacos中的配置文件

登陆Nacos,在配置管理-配置列表中增加名为gulimall-coupon.properties的properties文件填入配置内容

Data Id=gulimall-coupon.properties

coupon.user.name=李四
coupon.user.age=22

com.atguigu.gulimall.coupon.controller.CouponController中的public class CouponController{}上添加注解@RefreshScope即可动态从配置中心获取配置

请添加图片描述
此时在配置中心更改配置内容发布后即可实时更改服务中的配置内容

通过
@RefreshScope–动态刷新注解
@Value(${配置项的名})–获取某个配置的值
这两个注解就可以做到动态获取并刷新配置

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

  • 细节
    1/命名空间
    2/配置集
    3/配置集ID
    4/配置分组

1/命名空间:配置隔离(默认为public),默认新增的所有配置都在public空间

1.开发,测试,生产可能都有不同的配置.
![请添加图片描述](https://img-blog.csdnimg.cn/13a6883406be4942b46753f7d67e8725.png)创建3个命名空间

在prop里也创建一个名字和内容跟public相同的配置文件请添加图片描述
重启coupon,会发现application还是默认获取public命名空间中的配置
如果想启动application使用其他命名空间的配置,则需要在bootstrap.properties中增加配置

spring.cloud.nacos.config.namespace=9d7d11f2-7dc2-42b3-9230-c6c8f0562a53

9d7d11f2-7dc2-42b3-9230-c6c8f0562a53为命名空间后的值(新版可以直接输入命名空间的名称)请添加图片描述这样就可以利用命名空间来做环境隔离.

也可以每一个微服务之间相互隔离配置,为每一个微服务都创建自己的命名空间.只加载自己的命名空间下的配置.
请添加图片描述创建优惠券与会员的命名空间,并连接至自己的命名空间.

2/配置集:所有配置的集合
3/配置集ID:类似于配置文件名

4/配置分组(重要):默认所有的配置集都属于DEFAULT_GROUP

比如双11用某种配置,618用某种配置.
请添加图片描述配置管理中设置了一个1111的优惠券分组,
在bootstrap.properties中设置spring.cloud.nacos.config.group=1111就可以把配置文件切换到1111的分组,如果不设置就是使用默认分组

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=gulimall-coupon
#连接至gulimall-coupon命名空间
spring.cloud.nacos.config.namespace=2dc1f8fe-f5a4-4336-b9f1-c8c8d0643d93
#启用命名空间中group=1111的配置
spring.cloud.nacos.config.group=1111

每个微服务创建自己的命名空间,使用配置分组区分使用环境,如dev,test,prop环境.
通过在bootstrap.properties中修改分组名就可以确认使用哪个环境.

随着业务不断壮大,微服务的配置会非常多,将所有配置写在一个配置文件中不现实.一般的做法是拆分成不同的配置文件,比如跟数据源有关的配置文件写在一起,跟框架有关的写在一起等等.

这时就可以将配置文件拆分开来
在配置管理中新建
datasource.yml
mybatis.yml
other.yml
将模块中的application.yml中的原配置文件拆分开来

原配置文件↓

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.56.10:3306/gulimall_sms
    driver-class-name: com.mysql.jdbc.Driver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-coupon

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
server:
  port: 7000

datasource.yml

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.56.10:3306/gulimall_sms
    driver-class-name: com.mysql.jdbc.Driver

mybatis.yml

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto

other.yml

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-coupon
server:
  port: 7000

此时需要让微服务启动的时候同时加载这三个配置文件
在bootstrap.properties中注释掉之前的config.grouup,然后加入下面配置(新版没有使用)

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=gulimall-coupon
#连接至gulimall-coupon命名空间
spring.cloud.nacos.config.namespace=2dc1f8fe-f5a4-4336-b9f1-c8c8d0643d93
##启用命名空间中group=1111的配置
#spring.cloud.nacos.config.group=dev


#发现.ext-config是一个数组
#加载的data-id
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
#加载的group
spring.cloud.nacos.config.ext-config[0].group=dev
#是否动态刷新,默认是否
spring.cloud.nacos.config.ext-config[0].refresh=true

#加载的data-id
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
#加载的group
spring.cloud.nacos.config.ext-config[1].group=dev
#是否动态刷新,默认是否
spring.cloud.nacos.config.ext-config[1].refresh=true

#加载的data-id
spring.cloud.nacos.config.ext-config[2].data-id=other.yml
#加载的group
spring.cloud.nacos.config.ext-config[2].group=dev
#是否动态刷新,默认是否
spring.cloud.nacos.config.ext-config[2].refresh=true

重启服务
可以看到console中读取了设置好的配置文件,和默认读取的配置文件

2022-09-19 21:21:15.020  INFO 17508 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'datasource.yml', group: 'dev'
2022-09-19 21:21:15.030  INFO 17508 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'mybatis.yml', group: 'dev'
2022-09-19 21:21:15.036  INFO 17508 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'other.yml', group: 'dev'
2022-09-19 21:21:15.044  INFO 17508 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='gulimall-coupon.properties'}, NacosPropertySource {name='other.yml'}, NacosPropertySource {name='mybatis.yml'}, NacosPropertySource {name='datasource.yml'}]}

请添加图片描述但是此时无法在我们配置的coupon命名空间中找到属于Group内dev分组的gulimall-coupon.properties,所以就使用了项目中的gulimall-coupon.properties.

再次修改配置文件bootstrap.properties

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=gulimall-coupon
#连接至gulimall-coupon命名空间
spring.cloud.nacos.config.namespace=2dc1f8fe-f5a4-4336-b9f1-c8c8d0643d93
##启用命名空间中group=1111的配置
spring.cloud.nacos.config.group=prod


#发现.ext-config是一个数组
#加载的data-id
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
#加载的group
spring.cloud.nacos.config.ext-config[0].group=dev
#是否动态刷新,默认是否
spring.cloud.nacos.config.ext-config[0].refresh=true

#加载的data-id
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
#加载的group
spring.cloud.nacos.config.ext-config[1].group=dev
#是否动态刷新,默认是否
spring.cloud.nacos.config.ext-config[1].refresh=true

#加载的data-id
spring.cloud.nacos.config.ext-config[2].data-id=other.yml
#加载的group
spring.cloud.nacos.config.ext-config[2].group=dev
#是否动态刷新,默认是否
spring.cloud.nacos.config.ext-config[2].refresh=true

重启微服务发送/coupon/coupon/test可以得到返回的数据即可认为配置已生效
以后只需要在bootstrap.properties中说明加载了配置中心中的哪些配置文件即可

@Value
@ConfiggurationProperties…等等注解也可以获取到配置中心中的配置值
以前SpringBoot任何方法从配置文件中获取值,都能使用
配置中心有的优先使用配置中心的

Nacos的更多详细使用方法还可以参照Nacos的官方文档
https://nacos.io/zh-cn/docs/what-is-nacos.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值