前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot配置文件还能这样用?太神奇了

Spring Boot配置文件还能这样用?太神奇了

作者头像
大风写全栈
发布2024-11-12 17:08:34
400
发布2024-11-12 17:08:34
举报
文章被收录于专栏:锤子代码

事情是这样的。。

接上,遇到这样一个需求。

同个项目A,需要部署到两个地区。

我们就会想到用两个配置文件(application-a.properties/application-a.yaml),来区分地区。

思路正确,确实这样做最方便。

写着写着变样了?

代码写着,忽然有一天。

问题出现了,地区a需要在Java代码里面增加一个判断,但地区b并不需要这个判断。

这时,小明出现。给了个解决方案:

在指定类上增加@Profile("a")注解,就可以在指定配置文件激活时,加载此类。

这样解决了问题,却引发另一个问题:我这个类,90%代码相同。

如果用@Profile("a"),会导致重复代码过高。

还有其它办法吗¿

有的,而且很灵活。

一句话,在代码里面获得ActiveProfile的值,进行if判断。

如果你引入了Hutool工具,可以用下面的代码获取第一个环境配置(有另外一个方法获取多个环境配置):

代码语言:javascript
复制
String activeProfile = SpringUtil.getActiveProfile();

然后:

代码语言:javascript
复制
 if (activeProfile.contains("a")) {
    // 原来的代码.         
 }

假如,没有Hutool工具怎么办?

用下面的工具类(从Hutool的代码精简而来):

代码语言:javascript
复制
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringUtil implements ApplicationContextAware {
  private static ApplicationContext applicationContext;

  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    SpringUtil.applicationContext = applicationContext;
  }

  /**
   * 获取当前的环境配置,无配置返回null
   *
   * @return 当前的环境配置
   */
  public static String[] getActiveProfiles() {
    if (null == applicationContext) {
      return null;
    }
    return applicationContext.getEnvironment().getActiveProfiles();
  }

  /**
   * 获取当前的环境配置,当有多个环境配置时,只获取第一个
   *
   * @return 当前的环境配置
   */
  public static String getActiveProfile() {
    final String[] activeProfiles = getActiveProfiles();
    return activeProfiles != null && activeProfiles.length != 0 ? activeProfiles[0] : null;
  }
  
}

所以,学会了吗?


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 锤子代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档