Java 如何在spring测试中动态设置环境变量
我正在尝试使用spring boot运行spring测试用例。我的测试类如下所示Java 如何在spring测试中动态设置环境变量,java,spring,spring-mvc,spring-boot,spring-boot-test,Java,Spring,Spring Mvc,Spring Boot,Spring Boot Test,我正在尝试使用spring boot运行spring测试用例。我的测试类如下所示 @ContextConfiguration(initializers = TestContextInitializer.class) @RunWith(SpringRunner.class) @SpringBootTest(classes = {TestServiceApplication.class}) public class SampleTest { @org.junit.Test publ
@ContextConfiguration(initializers = TestContextInitializer.class)
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TestServiceApplication.class})
public class SampleTest {
@org.junit.Test
public void getContactsByName() throws Exception {
}
}
而我的配置类看起来像
public class TestContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
System.setProperty("DATA_DB_URL","some_url");
System.setProperty("DATA_DB_USER","some_user");
System.setProperty("DATA_DB_PASSWORD","some_password");
System.setProperty("DATA_DB_POOL_SIZE","2");
System.setProperty("DATA_DB_ROW_PREFETCH_SIZE","50");
}
}
公共类TestContextInitializer实现ApplicationContextInitializer{
@凌驾
公共无效初始化(ConfigurableApplicationContext ConfigurableApplicationContext){
setProperty(“DATA_DB_URL”,“some_URL”);
set属性(“数据用户”、“某些用户”);
set属性(“数据\数据库\密码”、“某些\密码”);
System.setProperty(“数据\数据库\池\大小”,“2”);
System.setProperty(“数据行预取大小”,“50”);
}
}
一切正常,但我有问题。我不能按照我公司的政策在源代码中签入密码。我如何将密码外部化,以便不必签入密码 您可以在运行时通过系统、环境或命令行变量提供密码(或任何Spring属性)。所有这些源都是(a)在运行时定义的,以及(b)在代码库外部定义的 例如:
设置一个名为导出密码=。。。;java-jarapp.jar
的环境变量,该变量将出现在Spring环境中password
设置一个JVM系统参数,该参数将出现在Spring环境中java-Dpassword=-jar app.jar
设置一个命令行变量,该变量随后将出现在Spring环境中java-jarmyapp.jar--password=…
更多详细信息。只需使用环境变量即可。或者有
@PropertySource
注释,用于在测试中使用不同的属性
但另一方面,您真的不应该使用这样的系统属性。系统属性用于系统、操作系统、时间系统、语言等。它不应该与您的应用程序有任何关系。这还引入了全局共享状态。虽然您可能不知道,但如果您开始并行运行测试,如果您在不同的测试中更改这些值,它们将偶尔中断。您可能会遇到其他问题,例如,对于两个不同的组件,您需要DATA\u DB\u USER
的属性不同