SpringBoot中获取profile的方法详解

作者:m0_54850467 时间:2023-11-19 18:05:00 

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,所以可以获取到环境的一些信息;

来源:https://blog.csdn.net/m0_54850467/article/details/124031603

标签:SpringBoot,获取,profile
0
投稿

猜你喜欢

  • 如何通过JVM角度谈谈Java的clone操作

    2023-10-13 09:54:40
  • Spring Boot中lombok的安装与使用详解

    2021-08-26 14:50:38
  • 深入理解Android MD5数据加密

    2022-03-16 07:48:03
  • java中Callback简单使用总结

    2022-12-03 19:07:38
  • Android Studio 通过登录功能介绍SQLite数据库的使用流程

    2023-09-22 00:37:29
  • 使用ViewPager实现左右循环滑动及滑动跳转

    2023-04-12 20:42:43
  • java8中的默认垃圾回收器(GC)

    2021-12-01 04:27:30
  • java struts2学习笔记之线程安全

    2022-08-07 00:13:07
  • 使用java.nio.file 库优雅的操作文件详解

    2022-09-20 00:51:12
  • C语言高效编程的几招小技巧

    2023-11-02 14:12:50
  • C#实现Zip压缩目录中所有文件的方法

    2021-05-29 15:41:47
  • SpringBoot集成Beetl后统一处理页面异常的方法

    2023-11-10 19:57:55
  • C#检测DataSet是否为空的方法

    2023-02-24 03:23:41
  • c#文件名/路径处理方法示例

    2021-11-28 21:02:40
  • java在网页上面抓取邮件地址的方法

    2023-10-01 19:18:21
  • C#加密在实际中的应用

    2022-05-11 14:57:21
  • Map集合之HashMap的使用及说明

    2022-07-23 15:56:56
  • SSH框架网上商城项目第22战之银行图标以及支付页面显示

    2022-02-18 19:34:03
  • 详解Java如何实现一个像String一样不可变的类

    2022-01-12 16:17:11
  • MybatisPlus使用@TableId主键id自增长无效的解决

    2023-01-30 15:59:41
  • asp之家 软件编程 m.aspxhome.com