Java SpringBoot SpringApplicationBuilder

Java SpringBoot SpringApplicationBuilder,java,spring,cucumber,spring-boot,Java,Spring,Cucumber,Spring Boot,我需要通过创建Cucumber集成测试来测试我的Spring应用程序代码。我使用SpringApplicationBuilder在触发实际逻辑之前启动我的应用程序,并使用以下语法执行此操作:- application = new SpringApplicationBuilder() .parent(new Object[]{"classpath:file1.xml", "classpath:file2.xml"}) .profiles("abc") .properties

我需要通过创建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()的属性(名称、值)对的值。我尝试了以下方法来设置它们:-

  • 如上所述使用名称-值对
  • 使用(名称、值)对的哈希映射列出项
  • 创建可配置环境,检索可变属性资源 并在其中设置我的属性
  • 这些选项都不起作用,因此当应用程序启动并且代码试图访问某些系统属性值时,它会中断

    有没有办法解决这个问题。。非常感谢所有的帮助!
    我需要这些属性是Spring属性,以确保应用程序正常工作。也许我可以用别的方法用Spring道具测试我的代码?如果是,我该怎么做?

    您可以按如下方式配置属性:

    application = new SpringApplicationBuilder()
        .parent(new Object[]{"classpath:file1.xml", "classpath:file2.xml"})
        .profiles("abc")
        .properties("key1:test1", "key2:test2") 
        .showBanner(false)
        .logStartupInfo(true)
        .headless(true)
        .application()
        .run();
    
    现在,使用
    @Value
    注释检索属性:

    @Value("${key1}")
    String val;
    

    val
    变量将被分配值
    test1

    我自己也处理过同样的问题。 我的问题是,我试图设置其值的键也在application.properties文件中设置


    从文件中删除条目后,它就工作了

    你是如何检索环境变量的?我实际上并没有检索环境变量。。我只需要使用特定于Spring的属性,我正在使用注释检索这些属性。因此,如果Spring属性设置正确,Cuke测试应该像Spring应用程序正常触发一样运行。非常感谢您的帮助,但是我在执行上述步骤时得到的值是“$key1”,而不是实际值。。任何想法…我能够使用上面的代码注入key1值。请共享您用
    @Value
    注释的类。另外,共享spring配置文件。