说明:
作为测试开发人员,我想在执行测试之前选择一个特定的属性文件。
问题:
如何在命令行中调用所需的属性?
我正在使用mvn
来构建我的项目。
想法:
我在想类似的东西:
~mvn clean verify -Dproperty.source.project1=QA1 -Dproperty.source.project2=QA2
最好在命令行中处理多个属性选择(如上面的行),因为该项目将有多个"propertycontrollers"
代码:
package com.core.propertycontroller;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
@Configuration
@PropertySource("classpath:application-${env}.properties")
//This project will have Project2PropertyLoader.class, and so on and so forth.
public class Project1PropertyLoader {
public Project1PropertyLoader() { super();}
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
我正在使用@ContextConfiguration
来加载此类。
package com.testrunners;
import com.core.propertycontroller.Project1PropertyLoader;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { Project1PropertyLoader.class } , loader = AnnotationConfigContextLoader.class)
public class EnvironmentTest {
@Autowired
private Environment environment;
@Value("${sample.url}")
private String url;
@Test
public void printUrl() {
System.out.println("Project1PropertyLoader Url via @Value " + url);
System.out.println("Project1PropertyLoader Url via Environment " + environment.getProperty("sample.url"));
}
}
application-QA1.properties
sample.url = https://hello.com
application-QA2.properties
sample.url = https://world.com
更新: 也欢迎其他解决方案。洗耳恭听。 谢谢
答案 0 :(得分:0)
自从您为文件application-${env}.properties
命名以来,您应该只使用Spring Boot的内置“配置文件”功能。
请参见Spring Boot Reference Documentation,第Spring Boot Feature节,第2. Externalized Configuration章,其中列出:
Profile-specific application properties在打包的jar(
application-{profile}.properties
和YAML变体)之外。Profile-specific application properties包装在jar中(
application-{profile}.properties
和YAML变体)
还有第3. Profiles章,上面写着(释义):
您可以使用以下开关在命令行上指定配置文件:
--spring.profiles.active=QA1
阅读上面链接的两章的文档,以了解有关此强大功能的更多信息。
答案 1 :(得分:0)
或者,您可以如下设置属性的默认值。
@Value("${some.key:stackoverflow.com}")
private String url;
在上面的示例stackoverflow.com中,如果未提供任何内容,则网址将有效。