讀寫nacos的配置中心的參數(shù)及變動(dòng)監(jiān)聽方式
nacos有配置中心的功能,那么spring應(yīng)用如何下載nacos的配置參數(shù)?
最簡單的方法
是借組sentinel的NacosDataSource完成這個(gè)操作,如下例子:

@Configuration
@Slf4j
@Getter
public class AuthenConfig {
@Value("${spring.cloud.nacos.discovery.server-addr}")
private String nacosAddrs;
private String groupId="my-seta-business";
private String dataId="my-seta-business:authen-Config";
private EasyShiroProperties properties;
@PostConstruct
public void init(){
ReadableDataSource<String, EasyShiroProperties> nacosDataSource = new NacosDataSource<>(nacosAddrs, groupId, dataId,
source -> JsonUtils.fromJson(source, new TypeReference<>() {
}));
synchronized (nacosDataSource.getProperty()) {
nacosDataSource.getProperty().addListener(new PropertyListener(){
private void updateLocal(Object value){
properties=(EasyShiroProperties)value;
}
@Override
public void configUpdate(Object value) { //nacos的配置更新時(shí)觸發(fā)
log.info("configUpdate:"+value);
updateLocal(value);
}
@Override
public void configLoad(Object value) {//第一次下載nacos配置時(shí)觸發(fā)
log.info("configLoad:"+value);
updateLocal(value);
}
});
}
}
}
監(jiān)聽器有兩個(gè)事件
一個(gè)是首次下載觸發(fā)的configLoad,一個(gè)是nacos配置更新觸發(fā)的configUpload。
那么如何用代碼更新nacos上的配置?用ConfigService的publishConfig,下面例子:
String groupId="my-seta-business";
String dataId="my-seta-business:authen-Config";
try {
ConfigService configService = NacosFactory.createConfigService("128.30.14.249:8848");
System.out.println(configService.publishConfig(dataId, groupId, "{\"sessionTimeOut\":3600,\"cacheEnabled\":true,\"sessionRegion\":\"my-seata-business-region\",\"sessionTokenName\":\"access-token\",\"jwtTokenName\":\"access-token\"}"));
} catch (NacosException e) {
e.printStackTrace();
}
值得注意的是
同一個(gè)服務(wù)里面即使用上述方法更新配置到nacos,也不會(huì)觸發(fā)configUpdate事件,configUpdate必須是本服務(wù)以外的地方發(fā)生更新才會(huì)觸發(fā),可見作者比較嚴(yán)謹(jǐn)。
如果我沒用sentinel,只想用ConfigService監(jiān)聽配置中心的數(shù)據(jù)異動(dòng)又怎樣做呢?ConfigService也有監(jiān)聽事件,代碼如下 :
/**
* Created by rocklee on 2022/4/20 14:13
*/
@Slf4j
@Configuration
public class AccountConfig implements InitializingBean , DisposableBean {
@Value("${spring.application.name}")
private String app;
@Value("${spring.profiles.active:}")
private String profile;
@Value("${spring.cloud.nacos.config.file-extension}")
private String fileExtension;
@Value("${spring.cloud.nacos.config.server-addr}")
private String configServerAddr;
private ConfigService configService;
@PostConstruct
public void init(){
}
@Override
public void afterPropertiesSet() throws Exception {
String dataId=app+(StringUtils.isBlank(profile)?"": "-"+profile)+"."+fileExtension;
final String group="DEFAULT_GROUP";
Properties properties=new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, configServerAddr);
configService= NacosFactory.createConfigService(properties);
log.info("nacos config:"+configService.getConfig(dataId,group,1000));
try {
configService.addListener(dataId, group, new AbstractListener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println(configInfo);
}
});
} catch (NacosException e) {
e.printStackTrace();
}
}
@Override
public void destroy() throws Exception {
configService.shutDown();
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringCloud alibaba使用Nacos配置中心解讀
- SpringCloudAlibaba分布式配置中心Nacos持久化方式
- 使用Nacos打造微服務(wù)配置中心詳解
- nacos配置中心的配置修改之后,無需重啟服務(wù)的實(shí)現(xiàn)過程
- springboot加載不到nacos配置中心的配置問題處理
- 如何解決無法獲取到Nacos配置中心的配置問題
- Nacos注冊中心和配置中心的底層原理全面解讀
- Nacos配置中心同一個(gè)命名空間下配置文件引用原理分析
- SpringCloud使用Nacos 配置中心實(shí)現(xiàn)配置自動(dòng)刷新功能使用
- 使用Nacos作為配置中心的命名空間、配置分組
相關(guān)文章
Mybatis mapper接口動(dòng)態(tài)代理開發(fā)步驟解析
這篇文章主要介紹了Mybatis mapper接口動(dòng)態(tài)代理開發(fā)步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
java實(shí)現(xiàn)客戶端向服務(wù)器發(fā)送文件
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)客戶端向服務(wù)器發(fā)送文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
詳解高性能緩存Caffeine原理及實(shí)戰(zhàn)
Caffeine是基于Java 8開發(fā)的,提供了近乎最佳命中率的高性能本地緩存組件,Spring5開始不再支持Guava Cache,改為使用Caffeine。Caffeine提供的內(nèi)存緩存使用參考Google guava的API2021-06-06
Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程
這篇文章主要介紹了Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Java實(shí)現(xiàn)多個(gè)數(shù)組間的排列組合
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多個(gè)數(shù)組間的排列組合,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02

