spring.profiles.active在專案中獲取引數
阿新 • • 發佈:2019-01-26
<!-- 環境切換專用: dev 開發環境 test:測試環境 prod:正式環境 -->
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
業務需要在專案中判斷現在是哪套環境 然後處理不同的業務 花了半個小時搞定 分享一下 前提是已經配置了spring profiles
1.先建立個bean用來儲存環境引數
/** * 單例儲存系統當前環境 */ public class ProfilesBean { //餓漢單例模式 //在類載入時就完成了初始化,所以類載入較慢,但獲取物件的速度快 private static ProfilesBean profilesBean = new ProfilesBean();//靜態私有成員,已初始化 private String profiles; private ProfilesBean() { //私有建構函式 } public static ProfilesBean getInstance() //靜態,不用同步(類載入時已初始化,不會有多執行緒的問題) { return profilesBean; } public String getProfiles() { return profiles; } public void setProfiles(String profiles) { this.profiles = profiles; } }
2.在建立個監聽器獲取變數
port com.tonglifang.common.beans.ProfilesBean; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; /** * 監聽獲取當前系統環境 dev test prod */ @WebListener public class AppListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { try { ServletContext sc = sce.getServletContext(); String profiles = sc.getInitParameter("spring.profiles.active"); ProfilesBean profilesBean = ProfilesBean.getInstance(); profilesBean.setProfiles(profiles); } catch(Exception e) { } } @Override public void contextDestroyed(ServletContextEvent sce) { } }
3.程式碼中使用
String profiles = ProfilesBean.getInstance().getProfiles();
這樣就得到了現在系統跑的是哪套環境