动态获取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进行依赖注入,实现根据环境动态配置

 
posted @ 2020-08-07 17:11  火羽  阅读(1211)  评论(0编辑  收藏  举报