我正试图在我的spring-boot应用程序中再次运行selenium测试。 我想用我的application.yml和application-test.yml定义属性启动应用程序。但是,默认情况下不会发生这种情况。
我尝试做Dave Syer suggested并实现了一个ApplicationContextInitializer,它使用YamlPropertySourceLoader读取application.yml和application-test.yml文件。
这似乎没有任何影响 - 在我的应用程序测试中将服务器端口设置为9000无效。
以下是我的测试基类代码:
@ContextConfiguration(classes = {TestConfiguration.class}, initializers = {TestApplicationYamlLoaderApplicationContextInitializer.class})
@SharedDriver(type = SharedDriver.SharedType.ONCE)
@ActiveProfiles({"test"})
public abstract class IntegrationBase extends AbstractTestNGSpringContextTests {
....
}
以下是我的ApplicationContextInitializer的代码:
public class TestApplicationYamlLoaderApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
ConfigurableEnvironment env = applicationContext.getEnvironment();
YamlPropertySourceLoader loader = YamlPropertySourceLoader.matchAllLoader();
PropertySource applicationYamlPropertySource = loader.load("application.yml", new FileSystemResource("src/main/resources/application.yml"));
PropertySource testProfileYamlPropertySource = loader.load("application.yml", new FileSystemResource("src/main/resources/application-test.yml"));
env.getPropertySources().addFirst(applicationYamlPropertySource);
env.getPropertySources().addFirst(testProfileYamlPropertySource);
System.out.println("woohoo!");
}
}
和application-test.yml
server:
port: 9000
答案 0 :(得分:1)
@ContextConfiguration
不知道Spring Boot初始化器。你试过@SpringApplicationConfiguration
了吗? (那你就不需要你的自定义初始化器。)
答案 1 :(得分:1)
在主配置类中使用@SpringBootApplication,然后spring boot将自动加载application.yml。如果要加载applicaton-test.yml,只需将当前配置文件设置为test。这是一个例子:
@SpringBootApplication
public class Main {
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
public static void main(String[] args) {
System.setProperty("spring.profiles.active", "test");
SpringApplication.run(Main.class, args);
}
}
您可能没有main方法,只需将配置文件设置在任何适当的位置,即JVM启动参数。
参考。 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
Spring Boot允许您外部化配置,以便在不同环境中使用相同的应用程序代码。您可以使用属性文件,YAML文件,环境变量和命令行参数来外部化配置。可以使用@Value注释将属性值直接注入到bean中,通过Spring的Environment抽象访问或通过@ConfigurationProperties绑定到结构化对象。
Spring Boot使用一个非常特殊的PropertySource命令,旨在允许合理地覆盖值。按以下顺序考虑属性: