这篇文章主要介绍了springboot获取profile的操作,文中的示例代码讲解详细,具有很好的参考价值,希望对大家有所帮助
spring boot与profile
spring boot 的项目中不再使用xml的方式进行配置,并且,它还遵循着约定大于配置。
静态获取方式
静态工具类获取当前项目的profile环境。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
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 * 项目名称: * 类名: SpringContextUtil * 描述: 获取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> 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的业务代码中使用起来很方便,毕竟是静态的方式嘛!
spring中的这个接口是在所有的Bean注入完毕,才会执行setApplicationContext方法,那么问题来了,往往在项目中我们可能会对一些Bean进行一些config操作,例如:@Bean注入,而有时候我们会根据不同的profile进行不同的定制化config。这个时候恰恰我们的工具类SpringContextUtil还没有执行setApplicationContext此时工具类中的context对象还是null。就会出现异常的情况。下面的方式可以弥补这个缺陷。
autowire ProfileConfig
使用这种方式首先声明一下,其实就相当于一个特殊的configBean一样,因为只有这样,这个类才不会在所有bean全部加载完毕后才能获取到context。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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的资料请关注脚本之家其它相关文章!
转自:https://www.jb51.net/article/243690.htm