动态获取jvm参数 Dspring.profiles.active
两种方法
第一种
@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进行依赖注入,实现根据环境动态配置
浙公网安备 33010602011771号