在SpringApplicationBuilder()上设置运行时属性

时间:2015-03-05 21:38:18

标签: java spring-boot

我需要通过创建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并在其中设置我的属性。

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尝试使用@TestPropertySource

注释Spring集成测试

示例:

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