Spring提供了@Profile注解来解决程序在不同运行环境时候的配置差别。
项目开发时候大多包含:开发、测试、上线运行几个过程,在每个过程中软件的工作环境一般多少有些差别,比如:在开发阶段利用本地数据库、测试阶段采用测试数据库、在上线运行阶段使用生产数据库。这些差别如果采用了手工维护就会存在各种问题:效率低下、容易发生人为因素意外错误。
利用Spring提供的@Profile注解就可以定义程序不同的运行场景配置,配置以后在启动程序时候给定不同的启动参数就可以灵活的切换运行场景,不再需要人工干预,这样就可以大大提升开发效率。
以配置开发环和生产境数据源为例子,具体说明使用步骤:
在Spring配置文件中利用@Profile声明开发环境和生产环境使用的数据源:
@Configuration public class DataSourceConfig { @Bean(name="dataSource") //重写BeanID @Profile("dev") //配置开发环境使用的数据源 public DataSource dataSourceForDev() { DruidDataSource dataSource = new DruidDataSource(); ... return dataSource; } @Bean(name="dataSource")//重写BeanID @Profile("production")//配置生产环境使用的数据源 public DataSource dataSourceForProd() { DruidDataSource dataSource = new DruidDataSource(); ... return dataSource; } }
其中“dev”表示开发环境,“production”表示生产环境,显然有两个BeanID是“dataSource”的数据源Bean对象,这两个对象不会同时初始化,Spring会根据激活的Profile属性初始化其中一个数据源Bean对象。
使用如下启动命令参数-Dspring.profiles.active=dev就可以设置当前激活的Profile是发环境“dev”,此时Spring会初始化属于开发环境的数据源Bean对象:
java -Dspring.profiles.active=dev -jar demo.jar
或者在SpringBoot的启动类中使用系统属性设置激活的Profile:
System.setProperty("spring.profiles.active" , "dev"); SpringApplication.run(AppConfig.class);
在测试时候可以使用 @ActiveProfiles注解设置当前激活的Profile。