ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot中获取profile的方法详解

2022-05-19 13:32:52  阅读:286  来源: 互联网

标签:profile String springframework 详解 static context org public SpringBoot


这篇文章主要介绍了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

标签:profile,String,springframework,详解,static,context,org,public,SpringBoot
来源: https://www.cnblogs.com/javalinux/p/16288184.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有