谷粒商城-全栈-13 分布式组件-Nacos 配置中心

一、Nacos Config

Nacos Config官方示例

1、引入 Nacos Config Starter

首先,修改 pom.xml 文件,引入 Nacos Config Starter。

  • 在gulimall-common的pom.xml文件中添加nacos配置
    <!--  nacos配置中心 -->
    <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

2、bootstrap.properties原数据配置

在应用的 /src/main/resources/bootstrap.properties 配置文件中配置 Nacos Config 元数据

在对应优惠券微服务创建 gulimall-coupon\src\main\resources\bootstrap.properties

springboot 里边,bootstrap.properties 会优于 appliction.yml 配置加载。

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

3、Nacos配置中心

完成上述两步后,应用会从 Nacos Config 中获取相应的配置,并添加在 Spring Environment 的 PropertySources 中。
这里我们使用 @Value 注解来将对应的配置注入到 xxxController 的 userName 和 age 字段,并添加 @RefreshScope 打开动态刷新功能。

创建gulimall-coupon\src\main\resources\application.properties

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

在gulimall-coupon\src\main\java\com\atguigu\gulimall\coupon\controller\CouponController.java创建测试函数

@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);
}

启动微服务gulimall-coupon,访问http://localhost:7000/coupon/coupon/test

{
    "msg": "success",
    "code": 0,
    "name": "lily",
    "age": 20
}

以前我们修改配置文件的属性,需要改源代码,尤其是项目上线之后,改了后还要打包再上传发布,如果我们的应用在10台服务器部署,那就更麻烦,我们希望做的是将属性配置交给Nacos配置中心来做。

我们可以看到在启动的时候,默认加载注册中心的属性,所以,我们只需要在Nacos的注册中心配置属性即可。

2020-08-13 00:42:21.486  INFO 80154 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-gulimall-coupon.properties'}]
bootstrapProperties-gulimall-coupon.properties

步骤:
1、添加数据集

  • 需要给配置中心默认添加一个叫 数据集(Data Id)gulimall-coupon.properties。默认规则,应用名.properties
  • 给 应用名.properties 添加任何配置

2、动态获取配置

  • @RefreshScope:动态获取并刷新
  • @Value("${配置项的名}"):获取到配置
  • 如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。

配置中心:
file

控制器增加 @RefreshScope 注解,Nacon配置中心修改的配置Controller控制器就可以实时获取到了。

/**
 * 优惠券信息
 *
 * @author kaiyi
 * @email corwienwong@gmail.com
 * @date 2020-08-11 00:57:31
 */
@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("/test")
    public R test(){
        return R.ok().put("name", name).put("age", age);
    }
}

添加@RefreshScope 注释之后,重启服务,然后再访问: http://localhost:7000/coupon/coupon/test

打印:

{
    "msg": "success",
    "code": 0,
    "name": "lisi",
    "age": 18
}

我们可以看到现在配置中心修改的属性,已经可以实时动态的获取到了。

为者常成,行者常至