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 相关文章推荐
分析并发编程之LongAdder原理
Jun 29 Java/Android
Java实现聊天机器人完善版
Jul 04 Java/Android
新手初学Java网络编程
Jul 07 Java/Android
spring boot中nativeQuery的用法
Jul 26 Java/Android
SpringBoot+VUE实现数据表格的实战
Aug 02 Java/Android
浅谈spring boot使用thymeleaf版本的问题
Aug 04 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
Android Studio实现简易进制转换计算器
May 20 Java/Android
详解Spring Security如何在权限中使用通配符
Jun 28 Java/Android
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
Jul 15 Java/Android
Java Spring读取和存储详细操作
Aug 05 Java/Android
JDK8中String的intern()方法实例详细解读
Sep 23 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
不错的一篇面向对象的PHP开发模式(简写版)
2007/03/15 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
Node.js学习入门
2017/01/03 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
讲解Python中fileno()方法的使用
2015/05/24 Python
Python 的描述符 descriptor详解
2016/02/27 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
Python闭包思想与用法浅析
2018/12/27 Python
python后端接收前端回传的文件方法
2019/01/02 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
在C#中如何实现多态
2014/07/02 面试题
元旦晚会邀请函
2014/02/01 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
物流管理专业求职信
2014/05/29 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
关于童年的读书笔记
2015/06/26 职场文书
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python