Java 有没有办法在SpringBoot应用程序中获取已加载属性文件的列表?
当我试图执行Java 有没有办法在SpringBoot应用程序中获取已加载属性文件的列表?,java,spring-boot,properties-file,wiremock,spring-boot-2,Java,Spring Boot,Properties File,Wiremock,Spring Boot 2,当我试图执行mvn clean install时,我只在一个平台上遇到问题。作为构建的一部分,我们编译多个组件,最后使用wiremock执行功能测试。它应该从功能测试配置文件中选择特定的配置,默认属性应该从application.properties文件中选择。但由于某些原因,相同的代码无法找到这些文件中提到的属性。所以,我只是想知道,我是否可以得到wiremock期间加载的属性文件列表?这将提供一些线索,说明为什么没有拾取预期的属性文件 所有属性文件都位于: src/main/resource
mvn clean install
时,我只在一个平台上遇到问题。作为构建的一部分,我们编译多个组件,最后使用wiremock执行功能测试。它应该从功能测试配置文件中选择特定的配置,默认属性应该从application.properties文件中选择。但由于某些原因,相同的代码无法找到这些文件中提到的属性。所以,我只是想知道,我是否可以得到wiremock期间加载的属性文件列表?这将提供一些线索,说明为什么没有拾取预期的属性文件
所有属性文件都位于:
src/main/resources
然后,从测试类开始
@ContextConfiguration(classes = SampleFTConfiguration.class)
public class SampleControllerTest{
//test method
}
@ComponentScan("com.xxx.xxx.xxx.ft")
@PropertySource("classpath:application-test.properties")
public class SampleFTConfiguration{
}
注意:我不希望任何人修复这个问题,我只想知道,我们是否可以获得加载的属性文件的名称?好的,按照测试定义,请确保:
@RunWith(SpringRunner.class)
(或JUnit5的@ExtendsWith(SpringExtension.class)
)
application test.properties
。您已经说过属性文件位于src/main/resources
中,但文件名可能意味着它应该位于src/test/resources
在搜索和尝试了一段时间后,您要查找的似乎是
ConfigurableEnvironment
代码非常简单。但是,我认为最好直接调试和检查configurableEnvironment
值,这样您就可以根据需要调整代码(删除过滤器名称等)
请添加测试的代码,至少是测试中使用的注释,以及
application.properties
文件的确切位置。如果没有代码,我们只能推测您可以在日志文件/控制台中获得这些详细信息。在服务器启动时,有关正在加载的配置文件的所有详细信息都记录在日志文件/控制台中。@pratap不,我们在日志/控制台中找不到文件名如果启用调试日志,它应该显示已加载的属性文件。我刚刚创建了示例spring引导应用程序并开始了调试日志记录,下面是我在日志中看到的内容2021-03-23 11:53:17.157 DEBUG 16544---[main]o.s.w.c.s.StandardServletEnvironment:添加[applicationConfig:[classpath:/application.properties]]PropertySource,搜索优先级立即低于[应用程序配置属性]
抱歉,应用程序测试。属性
在src/test/resources
中。但是,即使我在该文件中添加了任何属性。它在应用程序中也不起作用。我不想对代码做任何更改,因为我知道代码没有问题。出于某种原因,这是与平台相关的,在平台中可以更正属性RTIE文件未加载。那么您是否使用SpringRunner/SpringExtension?如果没有它,整个spring基础架构将无法启动
@Autowired
private ConfigurableEnvironment configurableEnvironment;
@Test
public void getProperties() {
Map<String, Object> mapOfProperties = configurableEnvironment.getPropertySources()
.stream()
.filter(propertySource -> propertySource.getName()
.contains("application-test.properties"))
.collect(Collectors.toMap(PropertySource::getName, PropertySource::getSource));
mapOfProperties.values()
.forEach(System.out::println);
}
properties-one=value-for-properties-one
properties-two=value-for-properties-two