SpringBoot获取spring.profiles.active的两种方式

方式一:@Value注解

package com.test;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
 
@Service
public class SpringProfileService {
    private static final Logger logger = LoggerFactory.getLogger(SpringProfileService.class);
 
    private static final String PRODUCTION_PROFILE = "production";
    private static final String STAGE_PROFILE = "stage";
 
    @Value("${spring.profiles.active}")
    private String active;
}

方式二:ApplicationContext应用上下文

@Component
public class SpringContextUtil implements ApplicationContextAware {

    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 {
        this.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());
    }

    // 获取当前环境
    public static String getActiveProfile() {
        return context.getEnvironment().getActiveProfiles()[0];
    }
}

方式三:SpringContextHolder Spring容器上下文

import org.springframework.core.env.Environment;
//--- pass some code
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
        Environment environment = SpringContextHolder.getApplicationContext().getEnvironment();
        System.out.println(environment.getProperty("spring.profiles.active"));
    }
}

方式一和方式二都需要依赖Spring的Bean对象,方式三使用是需要注意,恐怕这是不可能的,不应该使用。混合静态上下文和依赖注入框架的上下文是一种反模式。 这取决于您希望将env注入到哪里,不会有太大的区别,因为spring将把您的组件/服务作为注入上下文上的一个单例来处理。 总结:不要在spring应用程序中使用大量静态上下文。

如果是静态方法获取Bean,再通过Bean获取相关当前环境变量方法

参考:

SpringBoot中使用SpringContextHolder获取Bean实例

https://www.kuazhi.com/post/215.html

static静态方法内调用Spring(依赖注入)的bean

https://www.kuazhi.com/post/216.html

大家都在看: