我们在实际的项目开发中往往会有多套不一样的环境,比如,本地使用的开发环境、测试环境、生产环境等。多套环境的配置会有一些差异,那我们如何来控制这多套环境的差异呢?可以使用@Profile注解来解决这个问题。@Profile是Spring提供的用来标记当前运行环境的注解,根据不同的环境激活不同的配置
@Configuration
@Profile("prod")
public class ProductConfig {
@Bean(name = "dataSource")
public String getDataSource(){
return "prod dataSource";
}
}
@Configuration
@Profile("dev")
public class DevConfig {
@Bean(name = "dataSource")
public String getDataSource(){
return "dev datasource";
}
}
@Configuration
public class ServiceConfig {
@Resource
private String dataSource;
public String getDataSource(){
return dataSource;
}
}
public class ProfileDemoMain {
public static void main(String[] args){
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().setActiveProfiles("dev");
ctx.register(ProductConfig.class, DevConfig.class, ServiceConfig.class);
ctx.refresh();
ServiceConfig config = ctx.getBean(ServiceConfig.class);
System.out.println(config.getDataSource());
}
}
当然,实际项目中我们一般是把多套环境的配置放到不同的配置文件中,根据启动参数来控制
-Dspring.profiles.active="dev"