動態獲取jvm引數 Dspring.profiles.active
阿新 • • 發佈:2020-08-07
兩種方法
第一種
@Component public class SpringContext implements ApplicationContextAware{ private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext=applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 通過name獲取 Bean. * * @param name * @return */ public static Object getBean(String name) { return applicationContext.getBean(name); } /** * 通過class獲取Bean. * * @param clazz * @param <T> * @return */ public synchronized static <T> T getBean(Class<T> clazz) { return applicationContext.getBean(clazz); } /** * 通過name,以及Clazz返回指定的Bean * * @param name * @param clazz * @param <T> * @return */ public synchronized static <T> T getBean(String name, Class<T> clazz) { return applicationContext.getBean(name, clazz); } /// 獲取當前環境,該方法只有在容器啟動完成後可以呼叫 public static String getActiveProfile() { Environment environment = applicationContext.getEnvironment(); return environment.getActiveProfiles()[0]; }
這種方法最大的問題:實現ApplicationContextAware需要在spring容器建立成功過後才能呼叫
getActiveProfile,否則會報空指標。如果需要在容器啟動的時候,做一些特殊配置,這個方法就不適用了,可以用第二個方法
方法二:
@Configuration @AutoConfigureOrder(0) public class ProfileConfig { @Autowired private ApplicationContext context; public String getActiveProfile() { return context.getEnvironment().getActiveProfiles()[0]; } }
用@Configuration,並且@AutoConfigureOrder(0)進行優先載入,那麼在別的一些@Configuration配置的時候就可以通過@Autowired進行依賴注入,實現根據環境動態配置