【问题标题】:Spring Boot 2.5.6 catch 22 with spring.profiles.activeSpring Boot 2.5.6 使用 spring.profiles.active 捕获 22
【发布时间】:2022-07-13 21:14:45
【问题描述】:

我正在将一个 Web 应用程序从 Spring Boot 2.2.4 更新到 2.5.6,并使用 Open Rewrite 来处理单调乏味的问题。 IntelliJ 中的运行配置在命令行中有spring-boot:run -Dspring.profiles.active=local -f pom.xml(这一直适用于 2.2.4)。在向 main 添加 try/catch 后,为了真正了解为什么我一直收到退出代码 1 而没有其他信息,我发现 java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.profiles.active' in value "classpath:application-${spring.profiles.active}.properties" 是根本问题。

显然,在命令行上为spring.profiles.active 传递local 现在被忽略了……所以,我将它添加到application.yml,这给了我一条关于使用spring.profiles.active 无效的消息。我发现当前活动的配置文件现在应该在 config.activate.on-profile.active 中,所以我切换到该配置文件,然后在项目范围内搜索 spring.profiles.active 并将 每个 实例替换为 config.activate.on-profile.active

我一次又一次地运行项目,得到消息说它可以解决占位符spring.profiles.active!根据 IntelliJ,我终生无法弄清楚该占位符的来源,因为它现在不存在于项目中的任何地方,甚至在自述文件中也不存在!

我需要寻找一些秘密的地方来清除这个旧占位符吗?

【问题讨论】:

  • 不要!! Today, 2.5.7 has been released! xDxD
  • 谢谢!很确定我仍然会遇到这个问题……
  • yaa... :-( 1. 最佳:找出这个${spring.profiles.active} 未解决的原因和位置。2. config.activate.on-profile.active 绝对是“out” 3. Read this ...如果还是没有找到,那我们也得去看看..
  • ..2.3、2.4、2.5 发行说明的“从...升级”部分;(

标签: java spring spring-boot


【解决方案1】:

我遇到了同样的问题并找到了link to a github issue,其中提供了解决方法。 创建一个类:

public class JunitProfileResolver implements ActiveProfilesResolver {

  private static final String PROFILE_JUNIT = "test";

  @Override
  public String[] resolve(Class<?> testClass) {
    System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, PROFILE_JUNIT);
    return new String[] { PROFILE_JUNIT };
  }
}

并像这样使用它:

@ActiveProfiles(profiles = "test", resolver = JunitProfileResolver.class)
public class MyTest {

对我来说,这解决了问题。

【讨论】:

    猜你喜欢
    • 2021-03-15
    • 2021-01-09
    • 2021-12-24
    • 2021-03-26
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2020-02-10
    • 2020-06-21
    相关资源
    最近更新 更多