1.nacos官方网址链接
nacos官方网址
2.nacos开发依赖
<!-- nacos -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-spring-context</artifactId>
<version>0.3.6</version>
</dependency>
3.nacos开发应用
3.1使用注解获取nacos配置
/**
* @author denghengtong
* @date 2021/9/23-10:05
*/
@Configuration
//@PropertySource("classpath:properties/nacos.properties")
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "${nacos.server-addr}", namespace = "${nacos.namespace}"))
@NacosPropertySource(dataId = "${nacos.param.data.id}", groupId = "${nacos.group.id}", autoRefreshed = true, first = true)
public class NacosConfiguration {
}
- EnableNacosConfig配置nacos的地址,命名空间等内容
- NacosPropertySource指定data_id 和group
/**
* 启动类
*/
@SpringBootApplication
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "${nacos.server-addr}", namespace = "${nacos.namespace}"))
public class NacosApplication {
public static void main(String[] args) {
SpringApplication.run(NacosApplication.class, args);
}
}
3.2 获取nacos配置
/**
* 第一种 通过注解方式注入
* /
@NacosValue(value = "${datasource.url:not found}", autoRefreshed = true)
private String value;
/**
* 第二种 通过接口方式获取
* /
public void getConfig() {
Map<String, String> paramsMap = new HashMap<String, String>();
paramsMap.put("tenant",namespace);
paramsMap.put("dataId",dateId);
paramsMap.put("group",group);
String config = null;
try {
//以接口的形式获取最新配置
config = HttpUtils.doGet(url, paramsMap);
} catch (Exception e){
System.out.println("获取Nacos配置异常");
System.out.println(e);
}
//解析配置
......
}
- 第一种注解方式比较简单直接
- 第二种则是获取整个data_id的配置,需要手动进行解析,但是扩展性更高,而且不需要进行3.1的注解配置
3.3 nacos监听
- 如果使用的是注解方式,则可以跳过这一步,因为注解中配置autoRefreshed = true已经是可以自动刷新配置了,
- 但是如果采用第二种解析方式,把配置储存到缓存当中,则建议使用监听的方式,
- 监听配置更新后,回调解析方式,重新刷新配置,免去手动清空缓存的情况
/**
* 监听nacos配置变动后自动刷新缓存
*/
@NacosConfigListener(dataId = "config.properties")
public void listenerNacosConfig(String config){
//清空缓存
this.clearConfigMap();
//重新解析配置
.......
}
- NacosConfigListener会在nacos进行更改后获取到最近的配置给到config中
- 不过注意的是,3.1中的EnableNacosConfig配置要正确,否则会不生效