SpringBoot中获取profile的方法详解


Posted in Java/Android onApril 08, 2022

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
 * 项目名称:
 * 类名: 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的业务代码中使用起来很方便,毕竟是静态的方式嘛!

但是有一种缺陷,因为实现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的资料请关注三水点靠木其它相关文章!

Java/Android 相关文章推荐
Java Shutdown Hook场景使用及源码分析
Jun 15 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
Spring Boot 整合 Apache Dubbo的示例代码
Jul 04 Java/Android
idea 在springboot中使用lombok插件的方法
Aug 02 Java/Android
springboot 启动如何排除某些bean的注入
Aug 02 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
关于EntityWrapper的in用法
Mar 22 Java/Android
Java实战之课程信息管理系统的实现
Apr 01 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
Android存储中最基本的文件存储方式
Apr 30 Java/Android
Java 多线程协作作业之信号同步
May 11 Java/Android
Java使用HttpClient实现文件下载
Aug 14 Java/Android
教你在 Java 中实现 Dijkstra 最短路算法的方法
Java 垃圾回收超详细讲解记忆集和卡表
Java 常见的限流算法详细分析并实现
Java 超详细讲解ThreadLocal类的使用
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Java详细解析==和equals的区别
Apr 07 #Java/Android
Java 超详细讲解hashCode方法
Apr 07 #Java/Android
You might like
一些花式咖啡的配方
2021/03/03 冲泡冲煮
DOMXML函数笔记
2006/10/09 PHP
PHP新手上路(十一)
2006/10/09 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
2014/03/20 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
AspNet中使用JQuery boxy插件的确认框
2015/05/20 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
Python for i in range ()用法详解
2020/09/18 Python
Python模块 _winreg操作注册表
2020/02/05 Python
python如何保存文本文件
2020/06/07 Python
应聘自荐信
2013/12/14 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
优秀学生获奖感言
2014/02/15 职场文书
校园文明倡议书
2014/05/16 职场文书
2014年国庆节寄语
2014/09/19 职场文书
律师授权委托书范本
2014/10/07 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
Python实现双向链表基本操作
2022/05/25 Python