当前位置: 首页 > 知识库问答 >
问题:

如何加载application.yaml配置在Spring启动配置硒测试

江飞白
2023-03-14

我正在尝试对我的spring boot应用程序运行selenium测试。我想用我的应用程序的属性启动应用程序。yml和应用测试。yml定义。然而,默认情况下,这不会发生。

我试着按照Dave Syer的建议去做,并实现了一个Application ationContext初始器,它使用YamlProperty tySourceLoader读取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!");
}

}

以及应用测试。yml

server:
  port: 9000

共有2个答案

李睿
2023-03-14

在您的主配置类中使用@SpringBootApplication,然后Spring Boot将自动加载application.yml。如果您想加载applicaton-test.yml,只需设置当前配置文件进行测试。这是一个示例:

@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的环境抽象访问,或者通过@ConfigurationProperties绑定到结构化对象。

Spring Boot使用一个非常特殊的PropertySource顺序,该顺序旨在允许合理地重写值。属性按以下顺序考虑:

  1. @TestPropertySource在您的测试上添加注释
燕富
2023-03-14

@ContextConfiguration不知道Spring启动初始值设定项。您是否尝试了@SpringApplicationConfiguration?(这样就不需要自定义初始值设定项了。)

 类似资料:
  • 我有一个spring boot kafka客户端应用程序,其中有两个消费者在kafka中收听不同的主题和不同的消费者群。 为了实现,我需要下面有两个JAAS会议(使用不同的keytab文件) dc-jaas-A.conf文件 dc-jaas-B.conf 由于下面的connect tFactory在System.setProperty中设置dc-jaas-A.conf和dc-jaas-B.conf

  • 我已经阅读了stackoverflow中的相关问题。然而,答案只告诉如何配置身份验证检查。我需要在spring boot中用rsocket加密所有传输的数据。如何在带有SSL/tls的spring boot中使用tls。在如下所示初始化rsocket客户端时,我找不到任何受支持的方法,尽管我知道rsocket-it本身可以支持SSL/TLS。我发现了一些例子:

  • 我目前正在学习如何使用Spring Boot。到目前为止,我从未使用过像Spring这样的框架,而是直接使用文件(FileInputStream等) 我还发现了doc:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html,但我现在知道如何将它应用到我的项目中

  • 我有一个支持霸气2的要求 我已经使用docket对象创建了swagger 2 如何仅禁用/启用摇摆 3 或摇摆 2?我的意思是如何禁用 swagger 3 配置? 我没有使用启用/禁用swagger 3配置类。只需添加maven依赖项swagger 3就可以了。

  • 我想用spring boot开发web应用程序,我想在jsp文件中处理javascript和css资源。我在dispatcher servlet中从jsp配置对此文件的访问权限。xml如下所示: 在我的jsp文件中,我可以使用下面的代码来访问它: 我如何做配置mvc:资源映射在Spring启动?