如何创建项目架构以支持多个环境。在Spring的帮助下,每个环境都有不同属性文件的不同数据源,如(dev-propertiesfile,test-propertyFil,Production-propertyfile)
org.springframework.core.env.Environment;
答案 0 :(得分:9)
将属性文件放在与application.property
相同的位置,然后按
命名约定application-{profile}.properties
之类的
application-dev.properties
,application-test.properties
,
application-prod.properties
并在application.properties
设置spring.profiles.active=dev,test
等
答案 1 :(得分:3)
我将逐步介绍Spring引导应用程序。
运行。
答案 2 :(得分:2)
看看Spring Profile。您将定义一组配置文件配置,例如Test,Dev,Production。然后,当您启动应用程序时,您可以定义它应该使用的配置文件。
以下是一些tutorials如何使用。
这些人和你的问题一样:How to config @ComponentScan dynamic?
答案 3 :(得分:2)
对于Spring Boot应用程序,即使使用YAML文件
也可以轻松工作spring:
profiles: dev
property: this is a dev env
---
spring:
profiles: prod
property: this is a production env
---
但是,对于Spring MVC应用程序,它需要更多的工作。看看this link
基本上,它涉及两个步骤
如果您已在服务器上设置配置文件并希望它在您的应用程序中检索它,则可以使用System.getProperty或System.getenv方法。 如果没有找到配置文件,下面是获取配置文件并将其默认为本地配置文件的代码。
private static final String SPRING_PROFILES_ACTIVE = "SPRING_PROFILES_ACTIVE";
String profile;
/**
* In local system getProperty() returns the profile correctly, however in docker getenv() return profile correctly
* */
protected void setSpringProfile(ServletContext servletContext) {
if(null!= System.getenv(SPRING_PROFILES_ACTIVE)){
profile=System.getenv(SPRING_PROFILES_ACTIVE);
}else if(null!= System.getProperty(SPRING_PROFILES_ACTIVE)){
profile=System.getProperty(SPRING_PROFILES_ACTIVE);
}else{
profile="local";
}
log.info("***** Profile configured is ****** "+ profile);
servletContext.setInitParameter("spring.profiles.active", profile);
}
以下代码将获取application-dev.properties和common.properties
@Configuration
@Profile("dev")
public class DevPropertyReader {
@Bean
public static PropertyPlaceholderConfigurer properties() {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
Resource[] resources = new ClassPathResource[] { new ClassPathResource("properties/common.properties"), new ClassPathResource("properties/application-dev.properties") };
ppc.setLocations(resources);
ppc.setIgnoreUnresolvablePlaceholders(true);
return ppc;
}
}
要访问say application-prod.properties,您必须在类级别使用@Profile("prod")
。更多细节可以是found here