【问题标题】:Setting the run time properties on SpringApplicationBuilder()在 SpringApplicationBuilder() 上设置运行时属性
【发布时间】:2015-03-05 21:38:18
【问题描述】:

我需要通过创建 Cucumber 集成测试来测试我的 Spring 应用程序代码。我正在使用 SpringApplicationBuilder 在触发实际逻辑之前启动我的应用程序,并使用以下语法来执行此操作:-

    application = new SpringApplicationBuilder()
        .parent(new Object[]{"classpath:file1.xml", "classpath:file2.xml"})
        .profiles("abc")
        .properties("name:value") [It has 5/6 (name:value) pairs here]*
        .showBanner(false)
        .logStartupInfo(true)
        .headless(true)
        .application()
        .run();

我的 Spring 应用程序正确启动。但是,它没有获取我传递给 SpringApplicationBuilder() 的属性(名称、值)对的值。我尝试了以下设置:-

  • 使用上述名称值对
  • 使用(名称,值)对的 HashMap
  • 创建 ConfigurableEnvironment,检索 MutablePropertySources 并在其中设置我的属性。

这些选项都不起作用,因此当应用程序启动并且代码尝试访问某些系统属性值时,它会中断。

任何想法如何解决这个问题.. 非常感谢所有帮助!

【问题讨论】:

    标签: java spring-boot


    【解决方案1】:

    您在SpringApplicationBuilder 上配置的属性在您的应用程序的Environment 中可用,而不是作为系统属性。如果您的代码需要系统属性,那么您应该在启动 JVM 时使用 System.setProperty(key, value)-D 参数设置它们

    【讨论】:

    • 或者修改测试使用Spring环境。
    • 非常感谢您的回复。我明白你在说什么。但是,我的应用程序在使用 SpringApplicationBuilder 启动时需要 Spring 特定的属性。我正在尝试为我的 Cucumber 集成测试模拟整个 Spring 应用程序,就好像它在测试环境之外运行时会启动一样。因此,我可能无法在测试中使用系统属性。有没有办法将它们设置为 Spring 特定的应用程序属性?
    【解决方案2】:

    尝试使用 @TestPropertySource 注释您的 Spring 集成测试

    例子:

    @TestPropertySource(properties={"name1=value1","name2=value2"})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多