个人随笔
目录
试下用Nacos作为Spring的配置中心,看看效果如何
2021-07-01 22:20:31

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。这里直接用Nacos作为Spring配置文件的配置中心,这样子就不用每个应用下都放一个配置文件啦!

本篇只是单纯的把Nacos当作配置中心,不考虑当作服务发现,话说这个可比Eureka这种不维护了的且只有服务发现功能的组件好用多了,让我们开始吧!

一、搭建Nacos环境

这个太简单了,直接参考官方文档即可,https://nacos.io/zh-cn/docs/quick-start.html。

1、下载Nacos服务

我这里直接从

https://github.com/alibaba/nacos/releases

下载windows版本的
https://github.com/alibaba/nacos/releases/download/2.0.2/nacos-server-2.0.2.zip

2、解压启动

解压后直接cmd命令执行

  1. startup.cmd -m standalone

就启动成功了

3、访问控制台

http://127.0.0.1:8848/nacos
会跳转到登录页面,输入用户密码:nacos/nacos 就可以进入控制台啦。

二、搭建Spring环境

这里太简单了,参考我的博文:https://www.suibibk.com/topic/744968214315794432

然后引入Nacos依赖

  1. <!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-spring-context -->
  2. <dependency>
  3. <groupId>com.alibaba.nacos</groupId>
  4. <artifactId>nacos-spring-context</artifactId>
  5. <version>1.1.0</version>
  6. </dependency>

然后在配置类加上@EnableNacosConfig@NacosPropertySource注解

  1. @Configuration
  2. @ComponentScan(basePackages = "com.suibibk.spring")
  3. @EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
  4. @NacosPropertySource(dataId = "example", autoRefreshed = true)
  5. public class SpringConfiguration {
  6. //spring容器初始化时,会调用配置类的无参构造函数
  7. public SpringConfiguration(){
  8. System.out.println("容器启动初始化");
  9. }
  10. }

@EnableNacosConfig指定nacos的地址,这里是127.0.0.1:8848
@NacosPropertySource指定数据ID以及是否自动刷新

然后建立一个测试类

  1. @Component
  2. public class User {
  3. @NacosValue(value = "${username:个人随笔}", autoRefreshed = true)
  4. private String username;
  5. @Value("${password:123456}")
  6. private String password;
  7. public String getInfo() {
  8. return username1+";"+password;
  9. }
  10. }

启动类

  1. public class App {
  2. public static void main(String[] args) {
  3. ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
  4. User user = (User) context.getBean("user");
  5. while(true) {
  6. try {
  7. Thread.sleep(10000);
  8. } catch (InterruptedException e) {
  9. // TODO Auto-generated catch block
  10. e.printStackTrace();
  11. }
  12. System.out.println(user.getInfo());
  13. }
  14. }
  15. }

启动执行,结果如下

  1. 容器启动初始化
  2. pc;123456

为啥username默认值不是个人随笔,难道Nacos里面给username做了特殊处理?改成@Value试试

  1. @Value(value = "${username:个人随笔}")
  2. private String username;

结果还是

  1. 容器启动初始化
  2. pc;123456
  3. pc;123456

看来不是Nacos做了特殊处理,是Spring做了特殊处理,暂且不提,此时我们还没有在Nacos建立配置文件,去建立。
先改回配置

  1. @NacosValue(value = "${username:个人随笔}",autoRefreshed=true)
  2. private String username;

我程序用的是

  1. @NacosPropertySource(dataId = "example", autoRefreshed = true)

然后输入

  1. username: 林蛋黄
  2. password: 111

点击发布

  1. 容器启动初始化
  2. pc;111
  3. pc;111

靠username是魔咒,改了,改成username1

  1. @NacosValue(value = "${username1:个人随笔}",autoRefreshed=true)
  2. private String username;

再执行

  1. 容器启动初始化
  2. 个人随笔;111

额,Nacos服务端没改,去改下

  1. username1: 林蛋黄
  2. password: 111

点击发布,看下eclipse控制台

  1. 容器启动初始化
  2. 个人随笔;111
  3. 个人随笔;111
  4. 个人随笔;111
  5. 个人随笔;111
  6. 个人随笔;111
  7. 林蛋黄;111

已经变了,看来可以自动刷新了,那我们把password改为222

  1. username1: 林蛋黄
  2. password: 222

点击发布,再看eclipse控制台

  1. 林蛋黄;111

没有任何变化,那应该是得新加一个注解跟spring本身的@Value注解做兼容,网上查了下,就用

  1. @NacosRefresh

美滋滋加上,纳尼,竟然找不到这个依赖包?怎么回事的,网上看了下,没想到要用

  1. <dependency>
  2. <groupId>com.alibaba.nacos</groupId>
  3. <artifactId>nacos-spring-context</artifactId>
  4. <version>0.3.4</version>
  5. </dependency>

0.3.4版本,试了下,果然可以导入依赖包

  1. @NacosRefresh
  2. @Component
  3. public class User {
  4. @NacosValue(value = "${username1:个人随笔}",autoRefreshed=true)
  5. private String username;
  6. @Value("${password:123456}")
  7. private String password;
  8. public String getInfo() {
  9. return username+";"+password;
  10. }
  11. }

启动测试,再次修改Nacos控制台为

  1. username1: 林蛋黄
  2. password: 333
  3. ```]
  4. eclipse控制台看一下,果然变了

容器启动初始化
林蛋黄;222
林蛋黄;222
林蛋黄;333
```

真是奇了个怪,高版本还没有低版本的功能强?肯定是我哪里没有考虑到,不管了!

 542

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2