我们都知道,在企业开发过程中,一个项目往往都会有开发、测试、仿真、生产等环境配置,除了使用配置中心(比如Apollo等)之外,Spring Boot也提供了不同环境之间切换的机制,下面让我们来一起看看。
@Profile注解
@Profile注解用于标记某个bean在注册时,应该采用什么环境下面的配置信息,这里以数据库信息举例,我们分别创建一个开发环境、测试环境的数据源,其代码如下所示:
@Configuration
@Slf4j
public class ProFileAppConfig {
    @Bean(value = "proFileAppConfigDev",destroyMethod = "close")
    @Profile("dev")
    public DataSource getDataSourceDev(){
        Properties properties = new Properties();
        properties.setProperty("driver","com.mysql.jdbc.Driver");
        properties.setProperty("url","jdbc:mysql://zzm.zgj.cn.dev:3306/ZzmSpringBootLearn");
        properties.setProperty("username","admin_dev");
        properties.setProperty("password","admin_dev");
        DataSource dataSource = null;
        try {
            dataSource = BasicDataSourceFactory.createDataSource(properties);
            log.warn("创建DEV数据源成功");
        }catch (Exception e){
            log.warn("创建DEV数据源失败:", e);
        }
        return dataSource;
    }
    @Bean(value = "proFileAppConfigTest",destroyMethod = "close")
    @Profile("test")
    public DataSource getDataSourceTest(){
        Properties properties = new Properties();
        properties.setProperty("driver","com.mysql.jdbc.Driver");
        properties.setProperty("url","jdbc:mysql://zzm.zgj.cn.test:3306/ZzmSpringBootLearn");
        properties.setProperty("username","admin_test");
        properties.setProperty("password","admin_test");
        DataSource dataSource = null;
        try {
            dataSource = BasicDataSourceFactory.createDataSource(properties);
            log.warn("创建TEST数据源成功");
        }catch (Exception e){
            log.warn("创建TEST数据源失败:", e);
        }
        return dataSource;
    }
}
 
创建完毕后,还需要在application.properties配置文件中添加以下配置:
spring.profiles.active=dev
 
注意:spring会先检查spring.profiles.active配置是否存在,如果不存在,便不会启动profile机制
 这里我们以开发环境举例,启动应用,可看到如下日志信息:
 
再将application.properties配置文件中修改以下配置:
spring.profiles.active=test
 
再次启动应用,可看到如下日志信息:
 
可见,通过spring.profiles.active的配置和@Profile注解共同配合,完成了不同环境之间的切换。
通过配置jvm启动参数来进行环境切换
jvm启动参数配置:-Dspring.profiles.active
 在本地开发时,可以通过配置jvm启动参数来进行环境切换,这里以ideal举例;
 开始之前,我们先准备两个配置文件,application-dev.properties和application-test.properties文件,用来分别存放开发、测试环境的数据库配置信息,如下所示:
database.driverName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://zzm.zgj.cn.dev:3306/ZzmSpringBootLearn
database.userName=root_dev
database.password=123456_dev
 
database.driverName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://zzm.zgj.cn.test:3306/ZzmSpringBootLearn
database.userName=root_test
database.password=123456_test
 
然后再创建数据源:
@Data
@Slf4j
@Component
public class ProFileDataBase {
    private String driverName;
    private String url;
    private String userName;
    private String password;
    @Value("${database.driverName}")
    public void setDriverName(String driverName) {
        log.warn("ProFileDataBase:{}",driverName);
        this.driverName = driverName;
    }
    @Value("${database.url}")
    public void setUrl(String url) {
        log.warn("ProFileDataBase:{}",url);
        this.url = url;
    }
    @Value("${database.userName}")
    public void setUserName(String userName) {
        log.warn("ProFileDataBase:{}",userName);
        this.userName = userName;
    }
    @Value("${database.password}")
    public void setPassword(String password) {
        log.warn("ProFileDataBase:{}",password);
        this.password = password;
    }
}
 
接下来以ideal举例,设置启动时的jvm参数:
 
 启动应用,可以看到此时数据库配置成了开发环境的数据库:
 
 再来试试测试环境的:
 
 启动应用,可以看到此时数据库配置成了测试环境的数据库:
 
 可见,我们完成了不同环境之间的切换。
 好了,今天就先到这里了,眼过千遍不如手过一遍,赶紧去自己尝试一下吧。。。。拜拜



















