Java中EnvironmentAware 接口的作用
研究背景
我們?cè)诟阈碌呐渲弥行腘acos的時(shí)候,為了獲取新的配置中心的配置文件中配置的 dataId,以及配置 serverAddr、nacosGroup 等信息,所以才研究 EnvironmentAware 接口的如果寫死話那豈不是太不像話了,那就太多的魔法值了,所以我們可以通過 environmentAware 這個(gè)接口進(jìn)行從配置文件中【application.properties】獲取配置的配置中心的信息詳情
nacos.config.server-addr=IP地址 nacos.config.data-id=api.properties nacos.config.group=DEFAULT_GROUP nacos.config.namespace=public nacos.config.username=nacos nacos.config.password=nacos nacos.config.auto-refresh=true nacos.config.type=properties nacos.config.bootstrap.enable=true nacos.config.bootstrap.log-enable=true
之前沒有注意過這個(gè)接口【但是在之前看多租戶的工具源碼的時(shí)候看到過這個(gè)接口】,所以通過本次項(xiàng)目中的需求來好好研究一下這個(gè)接口的問題
源碼介紹以及使用方法
其實(shí)說白了就是哪個(gè)接口需要獲取配置,那么那個(gè)接口就需要進(jìn)行實(shí)現(xiàn)該接口 EnvironmentAware并實(shí)現(xiàn)里面的 setEnvironment方法
/**
其實(shí)說白了就是哪個(gè)接口需要獲取配置,那么那個(gè)接口就需要進(jìn)行實(shí)現(xiàn)該接口并實(shí)現(xiàn)里面的set方法
*/
public interface EnvironmentAware extends Aware {
void setEnvironment(Environment environment);
}作用
所有注冊(cè)到 Spring容器內(nèi)的 bean,只要該bean 實(shí)現(xiàn)了 EnvironmentAware接口,并且進(jìn)行重寫了setEnvironment方法的情況下,那么在工程啟動(dòng)時(shí)就可以獲取得 application.properties 的配置文件配置的屬性值,這樣就不用我們將魔法值寫到代碼里面了
使用方式代碼示例
通過 NacosController 實(shí)現(xiàn)了 EnvironmentAware 這個(gè)接口,并且實(shí)現(xiàn)了 setEnvironment 方法,之后通過 environment 這個(gè)對(duì)象進(jìn)行配置信息獲取
@RestController
@RequestMapping("/nacos")
public class NacosController implements EnvironmentAware {
private final static String NACOS_DATA_ID = "nacos.config.data-id";
private final static String NACOS_GROUP = "nacos.config.group";
private static String dataId = "";
private static String group = "";
@NacosInjected
private ConfigService configService;
@Autowired
private Environment environment;
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
// 通過 environment 獲取配置信息
@PostConstruct
private void init() {
dataId = environment.getProperty(NACOS_DATA_ID);
group = environment.getProperty(NACOS_GROUP);
}
/**
* 發(fā)布配置
* @return
*/
@RequestMapping(value = "/publishConfig",method = RequestMethod.GET)
public boolean publishConfig() {
boolean res = false;
try {
res = configService.publishConfig(dataId, group, "發(fā)布配置");
} catch (NacosException e) {
e.printStackTrace();
}
System.out.println(res);
return res;
}
}成功獲取到了配置信息,我們?cè)谂渲梦募性O(shè)置的 nacos.config.data-id=api.properties,所以這里獲取的值是正確

總結(jié)
- 哪個(gè)類需要獲取配置信息那么該類就需要進(jìn)行該接口 environmentAware 的實(shí)現(xiàn)
- 實(shí)現(xiàn) environmentAware 這個(gè)接口所提供的方法 setEnvironment()
- 通過 environment 進(jìn)行配置信息獲取
到此這篇關(guān)于Java中EnvironmentAware 接口的作用的文章就介紹到這了,更多相關(guān)Java EnvironmentAware 接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Spring-Retry解決Spring Boot應(yīng)用程序中的重試問題
重試的使用場景比較多,比如調(diào)用遠(yuǎn)程服務(wù)時(shí),由于網(wǎng)絡(luò)或者服務(wù)端響應(yīng)慢導(dǎo)致調(diào)用超時(shí),此時(shí)可以多重試幾次。用定時(shí)任務(wù)也可以實(shí)現(xiàn)重試的效果,但比較麻煩,用Spring Retry的話一個(gè)注解搞定所有,感興趣的可以了解一下2023-04-04
java動(dòng)態(tài)代理(jdk與cglib)詳細(xì)解析
靜態(tài)代理:由程序員創(chuàng)建或特定工具自動(dòng)生成源代碼,再對(duì)其編譯。在程序運(yùn)行前,代理類的.class文件就已經(jīng)存在了2013-09-09
Java Spring Boot實(shí)戰(zhàn)練習(xí)之單元測試篇
單元測試(unit testing),是指對(duì)軟件中的最小可測試單元進(jìn)行檢查和驗(yàn)證。對(duì)于單元測試中單元的含義,一般來說,要根據(jù)實(shí)際情況去判定其具體含義,如C語言中單元指一個(gè)函數(shù),Java里單元指一個(gè)類,圖形化的軟件中可以指一個(gè)窗口或一個(gè)菜單等2021-10-10

