我是新来的春天,如果有人能帮助我解决这个问题,我将不胜感激。
我有一个Spring Boot应用程序App1,它在主程序包和测试程序包中分别具有以下db属性:
src/main/resources/app1.properties
src/test/resources/app1-test.properties
我们假设app1.properties包含oracle数据库属性,而app1-test.properties包含h2数据库属性
通常,当我启动App1应用程序时,它会从app1.properties中拾取属性
我的要求是,当我创建应用程序的测试实例(例如TestApp1)时,应该选择app1-test.properties而不是app1.properties。
我该如何实现?请帮助。
答案 0 :(得分:2)
如果要在为应用程序运行测试类时进行引用,则可以在类上方添加@ActiveProfiles(“ test”)注释,以包括app1-test.properties配置。
该类的顶部应如下所示:
@ActiveProfiles("test")
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public class YourTestClassName {
答案 1 :(得分:0)
@domorecalculus的答案看起来不错。虽然,由于我实际上从未使用过@ActiveProfile,所以我会继续发布并发布替代方法,以防您找不到所需的内容:
@RunWith(SpringRunner.class)
@TestPropertySource(locations = "classpath:application-test.properties")
@SpringBootTest
public class InvalidTransactionTests {
...
}
一个优势可能是此注释将您的src/main/test
与src/main/java
完全分开。不利之处(对此我可能是错的)可能是因为src/main/java
中已经存在该文件的基本名称“ application.properties”。
答案 2 :(得分:0)
将属性文件放在与application.property相同的位置,并遵循命名约定appliaction- {profile} .properties,例如application-dev.properties,application-test.properties,application-prod.properties
在application.properties中设置spring.profiles.active = test以使用测试属性和开发人员属性,您可以设置spring.profiles.active = dev,默认情况下将选择application.properties
答案 3 :(得分:0)
@domorecalculus回答说,完成此操作的标准方法是使用Spring配置文件。我建议您在Spring Profiles中进行更多的挖掘,它不仅为您提供配置级别的灵活性,还为您提供代码级别的灵活性,例如,您可以使用@Profile(value =“ dev”)注释一个类,以便加载该类仅在开发模式下运行应用程序时。您可以将其视为策略模式的实现,但不能在运行时更改配置文件。
回到您的问题,我以前是通过以下方式做到的:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyApp.class)
@ActiveProfiles("test")
public class TestMyService {
.....
}