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命令执行
startup.cmd -m standalone
就启动成功了
3、访问控制台
http://127.0.0.1:8848/nacos
会跳转到登录页面,输入用户密码:nacos/nacos 就可以进入控制台啦。
二、搭建Spring环境
这里太简单了,参考我的博文:https://www.suibibk.com/topic/744968214315794432
然后引入Nacos依赖
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-spring-context -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>1.1.0</version>
</dependency>
然后在配置类加上@EnableNacosConfig和@NacosPropertySource注解
@Configuration
@ComponentScan(basePackages = "com.suibibk.spring")
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
@NacosPropertySource(dataId = "example", autoRefreshed = true)
public class SpringConfiguration {
//spring容器初始化时,会调用配置类的无参构造函数
public SpringConfiguration(){
System.out.println("容器启动初始化");
}
}
@EnableNacosConfig指定nacos的地址,这里是127.0.0.1:8848
@NacosPropertySource指定数据ID以及是否自动刷新
然后建立一个测试类
@Component
public class User {
@NacosValue(value = "${username:个人随笔}", autoRefreshed = true)
private String username;
@Value("${password:123456}")
private String password;
public String getInfo() {
return username1+";"+password;
}
}
启动类
public class App {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
User user = (User) context.getBean("user");
while(true) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(user.getInfo());
}
}
}
启动执行,结果如下
容器启动初始化
pc;123456
为啥username默认值不是个人随笔,难道Nacos里面给username做了特殊处理?改成@Value试试
@Value(value = "${username:个人随笔}")
private String username;
结果还是
容器启动初始化
pc;123456
pc;123456
看来不是Nacos做了特殊处理,是Spring做了特殊处理,暂且不提,此时我们还没有在Nacos建立配置文件,去建立。
先改回配置
@NacosValue(value = "${username:个人随笔}",autoRefreshed=true)
private String username;
我程序用的是
@NacosPropertySource(dataId = "example", autoRefreshed = true)
然后输入
username: 林蛋黄
password: 111
点击发布
容器启动初始化
pc;111
pc;111
靠username是魔咒,改了,改成username1
@NacosValue(value = "${username1:个人随笔}",autoRefreshed=true)
private String username;
再执行
容器启动初始化
个人随笔;111
额,Nacos服务端没改,去改下
username1: 林蛋黄
password: 111
点击发布,看下eclipse控制台
容器启动初始化
个人随笔;111
个人随笔;111
个人随笔;111
个人随笔;111
个人随笔;111
林蛋黄;111
已经变了,看来可以自动刷新了,那我们把password改为222
username1: 林蛋黄
password: 222
点击发布,再看eclipse控制台
林蛋黄;111
没有任何变化,那应该是得新加一个注解跟spring本身的@Value注解做兼容,网上查了下,就用
@NacosRefresh
美滋滋加上,纳尼,竟然找不到这个依赖包?怎么回事的,网上看了下,没想到要用
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>0.3.4</version>
</dependency>
0.3.4版本,试了下,果然可以导入依赖包
@NacosRefresh
@Component
public class User {
@NacosValue(value = "${username1:个人随笔}",autoRefreshed=true)
private String username;
@Value("${password:123456}")
private String password;
public String getInfo() {
return username+";"+password;
}
}
启动测试,再次修改Nacos控制台为
username1: 林蛋黄
password: 333
```]
eclipse控制台看一下,果然变了
容器启动初始化
林蛋黄;222
林蛋黄;222
林蛋黄;333
```
真是奇了个怪,高版本还没有低版本的功能强?肯定是我哪里没有考虑到,不管了!