谷粒商城-全栈-13 分布式组件-Nacos 配置中心
一、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("${配置项的名}"):获取到配置
- 如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。
配置中心:
控制器增加 @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
}
我们可以看到现在配置中心修改的属性,已经可以实时动态的获取到了。
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)