[英]How to override application.properties during production in Spring-Boot?
[英]Override application.properties for integration tests in spring-boot app
我有一个标准的spring-boot
应用程序,我想在生产环境中使用MS SQL数据库,而对于集成测试,我想使用h2
databse。 问题是我无法找出如何覆盖默认的application.properties
文件。 即使我尝试遵循一些教程,也没有提出正确的解决方案……也许我只是缺少了一些东西……
主班:
@SpringBootApplication
@EnableTransactionManagement
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication .class, args);
}
}
和带有测试的类:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyApplication.class)
@WebIntegrationTest
public class MessageControllerTest {
@Autowired
MessageRepository messageRepository;
...
...
...
@Test
public void testSomething(){
...
...
...
...
}
}
因此,问题是,如何在运行测试时强制spring-boot使用application-test.properties
文件,而不是应在运行时使用application.properties
。
我尝试例如用@TestPropertySource(locations="classpath:application-test.properties")
替换@WebIntegrationTest
批注,但这导致java.lang.IllegalStateException: Failed to load ApplicationContext
。
假设您的应用程序中有一个application-test.properties文件。
我有两种方式:
1.CLI JVM精简版
mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=test
在spring.profiles.active=test
添加spring.profiles.active=test
,它将加载您的application-test.properties文件。
@ActiveProfiles("test")
实际上,这很容易...经过几个小时的尝试,我意识到我只需要使用@ActiveProfiles("test")
批注来批注测试类。
@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyApplication.class)
@WebIntegrationTest
public class MessageControllerTest {
@Autowired
MessageRepository messageRepository;
...
...
...
@Test
public void testSomething(){
...
...
...
...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.