SpringBoot中獲取profile的方法詳解
spring boot與profile
spring boot 的項目中不再使用xml的方式進行配置,并且,它還遵循著約定大于配置。
靜態(tài)獲取方式
靜態(tài)工具類獲取當前項目的profile環(huán)境。
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.Locale;
/**
*
*/
/**
* @author wangjiuzhou (835540436@qq.com)
* @date 2018/10/27
* 項目名稱:
* 類名: SpringContextUtil
* 描述: 獲取bean的工具類,可用于在線程里面獲取bean
*/
@Component
public class SpringContextUtil implements ApplicationContextAware {
public static final String LOCAL_PROFILE = "local";
public static final String DEV_PROFILE = "dev";
public static final String TEST_PROFILE = "test";
public static final String PRO_PROFILE = "pro";
private static ApplicationContext context = null;
/* (non Javadoc)
* @Title: setApplicationContext
* @Description: spring獲取bean工具類
* @param applicationContext
* @throws BeansException
* @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
context = applicationContext;
}
// 傳入線程中
public static <T> T getBean(String beanName) {
return (T) context.getBean(beanName);
}
// 國際化使用
public static String getMessage(String key) {
return context.getMessage(key, null, Locale.getDefault());
}
// 獲取當前環(huán)境
public static String getActiveProfile() {
return context.getEnvironment().getActiveProfiles()[0];
}
}
點評:
這種方式在使用起來很方便也是現(xiàn)在各個博客文章所撰寫的方式,在很多Service的業(yè)務代碼中使用起來很方便,畢竟是靜態(tài)的方式嘛!
但是有一種缺陷,因為實現(xiàn)ApplicationContextAware接口,而spring中的這個接口是在所有的Bean注入完畢,才會執(zhí)行setApplicationContext方法,那么問題來了,往往在項目中我們可能會對一些Bean進行一些config操作,例如:@Bean注入,而有時候我們會根據(jù)不同的profile進行不同的定制化config。這個時候恰恰我們的工具類SpringContextUtil還沒有執(zhí)行setApplicationContext此時工具類中的context對象還是null。就會出現(xiàn)異常的情況。下面的方式可以彌補這個缺陷。
autowire ProfileConfig
使用這種方式首先聲明一下,其實就相當于一個特殊的configBean一樣,因為只有這樣,這個類才不會在所有bean全部加載完畢后才能獲取到context。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;
/**
* @author wangjiuzhou (835540436@qq.com)
* @date 2018/11/07
*
* 獲取當前項目環(huán)境:local、dev、test、pro
*/
@Configuration
public class ProfileConfig {
public static final String LOCAL_PROFILE = "local";
public static final String DEV_PROFILE = "dev";
public static final String TEST_PROFILE = "test";
public static final String PRO_PROFILE = "pro";
@Autowired
private ApplicationContext context;
public String getActiveProfile() {
return context.getEnvironment().getActiveProfiles()[0];
}
}
點評:
ProfileConfig ,首先是作為一個相當于Bean的形式存在著,此處的不在解釋@configuration和@component的區(qū)別;
注入ApplicationContext因為該接口extends于EnvironmentCapable,所以可以獲取到環(huán)境的一些信息;
以上就是SpringBoot中獲取profile的方法詳解的詳細內(nèi)容,更多關于SpringBoot獲取profile的資料請關注腳本之家其它相關文章!
相關文章
IntelliJ IDEA運行bat腳本,自動taskkill端口進程
這篇文章主要介紹了IDEA里面無法運行bat文件的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
SpringBoot訪問MongoDB數(shù)據(jù)庫的兩種方式
MongoDB是一種非關系型數(shù)據(jù)庫,通過文檔存儲數(shù)據(jù),適用于大規(guī)模數(shù)據(jù)存儲和高并發(fā)訪問,這篇文章主要介紹了SpringBoot訪問MongoDB數(shù)據(jù)庫的兩種方式,感興趣想要詳細了解可以參考下文2023-05-05
Windows環(huán)境IDEA下Ranger1.2.0源碼編譯詳細流程
本文給大家講解Windows環(huán)境IDEA下Ranger1.2.0源碼編譯過程,通過配置Tomcat,發(fā)布?security-admin-web項目,編譯啟動tomcat即可完成,需要的朋友參考下2021-06-06
ReentrantLock條件變量使多個線程順序執(zhí)行
這篇文章主要為大家介紹了ReentrantLock條件變量使多個線程順序執(zhí)行,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
SpringBoot打印POST請求原始入?yún)ody體方式
這篇文章主要介紹了SpringBoot打印POST請求原始入?yún)ody體方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
使用SpringBoot集成Thymeleaf和Flying?Saucer實現(xiàn)PDF導出
在?Spring?Boot?項目中,生成?PDF?報表或發(fā)票是常見需求,本文將介紹如何使用?Spring?Boot?集成?Thymeleaf?模板引擎和?Flying?Saucer?實現(xiàn)?PDF?導出,并提供詳細的代碼實現(xiàn)和常見問題解決方案,需要的朋友可以參考下2024-11-11

