如何使外部化属性文件可用于Spring启动集成测试?

时间:2018-02-23 18:27:01

标签: spring spring-boot junit properties properties-file

我正在使用Spring Boot开发应用程序。我在文件系统上有一个外化属性文件。它的位置存储在一个环境变量中,如下所示 -

  

export props = file://Path-to-file-on-filesystem/file.properties

此文件中的属性将加载到类路径中,并可供以下应用程序使用 -

List<String> argList = new ArrayList<>();
String properties = System.getenv().get("props");

try (InputStream is = BinaryFileReaderImpl.getInstance().getResourceAsStream(properties)) {
    if (is != null) {
        Properties props = new Properties();
        props.load(is);
        for(String prop : props.stringPropertyNames()) {
            argList.add("--" + prop + "=" + props.getProperty(prop));
        }
    }
} catch(Exception e) {
    //exception handling
}

这个argList在下面开始时传递给SpringBootApplication -

SpringApplication.run(MainApplication.class, argList);

我可以使用${prop.name}

访问所有属性

但是,当我运行JUnit Integration Tests时,我无法访问这些属性。我的所有数据库属性都在此外部化属性文件中。我不想将此文件保留在应用程序的任何位置,例如。的的src /主/资源

有没有办法在spring的测试环境中加载这些属性?

1 个答案:

答案 0 :(得分:0)

我终于可以在linux机器上使用@PropertySource读取外部化的属性文件。但是无法让它在Windows实例上运行。

完成的更改如下 -

export props=/path-to-file

请注意,file://和实际文件名已从环境变量中删除。

@Configuration
@PropertySource({"file:${props}/file-test.properties", "classpath:some_other_file.properties"}) 
public class TestConfiguration {

}

将此配置类保留在各个项目中&#39; src / test / java文件夹。感谢您Joe Chiavaroli上面的评论。