【问题标题】:Spring Boot multiple profiles works in IDE but not from command lineSpring Boot 多个配置文件在 IDE 中工作,但不能从命令行
【发布时间】:2018-03-05 13:38:20
【问题描述】:

我有一个带有多个 Java Config 类的 Spring Boot 应用程序。每个类都有自己的@Profile 名称。当从 Eclipse 运行应用程序并将 Program Arguments 设置为 --spring.profiles.active=config1,config2 服务器按预期运行,两个 Config 类中的所有 bean 都在运行。

但是当我尝试使用--spring.profiles... 从命令行启动应用程序时,只有一个配置文件的 bean 正在运行,顺序无关紧要。它只是按字母顺序排列的最后一个正在运行的配置文件。即使日志说

The following profiles are active: config1,config2

config1 的 bean 仍然没有出现。

还尝试在props文件中设置spring.profiles.include,结果相同。

有什么想法吗?

【问题讨论】:

  • tra 使用 -Dspring.profiles.active=config1,config2 从命令行 ehile 运行
  • 您可以尝试改用-Dspring.profiles.active=profile1,profile2 吗?看看这是否有帮助。
  • 不管配置文件设置为 D 参数还是程序参数,都是一样的。仅设置config1,工作正常。仅设置config2,工作正常。两者都设置,只创建一个配置的 bean。配置文件的顺序无关紧要。在 Eclipse 中,配置是 inclusive 并且使用了两个配置文件。在命令行上有一个 override 行为。
  • 您能再试一次,但要切换配置文件的顺序吗? (正在检查this other answer
  • 没有区别,总是运行带有 config2 注释的 Config 类,但不是 config1 Config。在 Eclipse 中,顺序没有区别,两个配置都在运行(如预期的那样)。

标签: java spring spring-boot


【解决方案1】:

这个问题仍然困扰着我。如果单独使用任何配置文件,它们就可以工作,但是当这两个组合在一起时,config1 配置文件的 bean 永远不会创建。调试 Spring 启动表明已找到配置并且正在进行预创建。但是真正的 bean 永远不会被创建和返回。

我创建了一个包装器类,它包装了config1 Java Config 类中的一个 bean,以强制 Spring 从该特定配置创建 bean。这不是问题的答案,也不是解决方案,而是一种变通方法。

@Service
@Profile("config1")
public class DataConsumerWrapperService {

    public DataConsumerWrapperService(final MessageParser mp) {
        // Do nothing, just trigger the parser bean creation
    }
}

【讨论】:

    猜你喜欢
    • 2015-05-08
    • 2019-03-12
    • 2017-01-23
    • 2015-09-11
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多