SpringBoot中获取profile的方法详解(spring @profile)

网友投稿 439 2022-08-05


SpringBoot中获取profile的方法详解(spring @profile)

目录spring boot与profile静态获取方式autowire ProfileConfig

spring boot与profile

spring boot 的项目中不再使用xml的方式进行配置,并且,它还遵循着约定大于配置。

静态获取方式

静态工具类获取当前项目的profile环境。

import org.springframework.beans.BeansException;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

import org.springframework.stereotype.Component;

import java.util.Locale;

/**

*

*/

/**

* @author wangjiuzhou (835540436@qq.com)

* @date 2018/10/27

* 项目名称:

* 类名: SpringContextUthttp://il

* 描述: 获取bean的工具类,可用于在线程里面获取bean

*/

@Component

public class SpringContextUtil implements ApplicationContextAware {

public static final String LOCAL_PROFILE = "local";

public static final String DEV_PROFILE = "dev";

public static final String TEST_PROFILE = "test";

public static final String PRO_PROFILE = "pro";

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 {

context = applicationContext;

}

// 传入线程中

public static 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];

}

}

点评:

这种方式在使用起来很方便也是现在各个博客文章所撰写的方式,在很多Service的业务代码中使用起来很方便,毕竟是静态的方式嘛!

但是有一种缺陷,因为实现ApplicationContextAware接口,而spring中的这个接口是在所有的Bean注入完毕,才会执行setApplicationContext方法,那么问题来了,往往在项目中我们可能会对一些Bean进行一些config操作,例如:@Bean注入,而有时候我们会根据不同的profile进行不同的定制化config。这个时候恰恰我们的工具类SpringContextUtil还没有执行setApplicationContext此时工具类中的context对象还是null。就会出现异常的情况。下面的方式可以弥补这个缺陷。

autowire ProfileConfig

使用这种方式首先声明一下,其实就相当于一个特殊的configBean一样,因为只有这样,这个类才不会在所有bean全部加载完毕后才能获取到context。

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.ApplicationContext;

import org.springframework.context.annotation.Configuration;

/**

* @author wangjiuzhou (835540436@qq.com)

* @date 2018/11/07

*

* 获取当前项目环境:local、dev、test、pro

*/

@Configuration

public class ProfileConfig {

public static final String LOCAL_PROFILE = "local";

public static final String DEV_PROFILE = "dev";

public static final String TEST_PROFILE = "test";

public static final String PRO_PROFILE = "pro";

@Autowired

private ApplicationContext context;

public String getActiveProfile() {

return context.getEnvironment().getActiveProfiles()[0];

}

}

点评:

ProfileConfig ,首先是作为一个相当于Bean的形式存在着,此处的不在解释@configuration和@component的区别;

注入ApplicationContext因为该接口extends于EnvironmentCapable,所以可以获取到环境的一些信息;

以上就是SpringBoot中获取profile的方法详解的详细内容,更多关于SpringBoot获取profile的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringCloud Function SpEL注入漏洞分析及环境搭建
下一篇:教你在 Java 中实现 Dijkstra 最短路算法的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~