美文网首页
Spring Boot实现多环境下配置切换

Spring Boot实现多环境下配置切换

作者: Xiewb | 来源:发表于2019-05-05 22:57 被阅读0次

    应用程序在不同的环境下,会有不同的配置信息。例如数据库连接信息,开发、测试和生产每个环境都有自己的配置信息。使用Spring Boot的Profile,可以帮助我们实现多场景下的配置切换,方便开发中进行测试和部署生产环境。下面是数据库连接信息多配置切换的例子。

    添加datasource-dev.properties文件

    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.username=root
    jdbc.password=123456
    jdbc.url=jdbc:mysql://localhost:3306/devdb
    

    添加datasource-prod.properties文件

    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.username=root
    jdbc.password=654321
    jdbc.url=jdbc:mysql://localhost:3306/proddb
    

    编写配置类

    上一篇集成Mybatis中,使用的@Value来获取配置文件信息,这次从环境中获取。

    import com.alibaba.druid.pool.DruidDataSourceFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.springframework.context.EnvironmentAware;
    import org.springframework.context.annotation.Bean;
    import org.springframework.core.env.Environment;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    
    import javax.sql.DataSource;
    import java.io.IOException;
    import java.util.Properties;
    
    public class AbstractMybatisConfig implements EnvironmentAware {
        @Bean
        public DataSource dataSource() throws Exception {
            Properties prop = new Properties();
            prop.setProperty("username",this.env.getProperty("jdbc.username"));
            prop.setProperty("password",this.env.getProperty("jdbc.password"));
            prop.setProperty("url",this.env.getProperty("jdbc.url"));
            prop.setProperty("driverClassName",this.env.getProperty("jdbc.driverClassName"));
            return DruidDataSourceFactory.createDataSource(prop);
        }
    
        @Bean
        public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws IOException {
            SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
            sqlSessionFactory.setDataSource(dataSource);
            ResourcePatternResolver res = new PathMatchingResourcePatternResolver();
            sqlSessionFactory.setMapperLocations(
                    res.getResources("classpath:com/**/dao/*.xml"));
            return sqlSessionFactory;
        }
    
        private Environment env;
    
        @Override
        public void setEnvironment(Environment environment) {
            this.env = environment;
        }
    }
    

    开发环境配置类

    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    import org.springframework.context.annotation.PropertySource;
    
    @Configuration
    @Profile("dev")
    @MapperScan(basePackages="com.**.dao")
    @PropertySource("classpath:datasource-dev.properties")
    public class MybatisDevConfig extends AbstractMybatisConfig {
    }
    

    生产环境配置类

    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    import org.springframework.context.annotation.PropertySource;
    
    @Configuration
    @Profile("prod")
    @MapperScan(basePackages="com.**.dao")
    @PropertySource("classpath:datasource-prod.properties")
    public class MybatisProdConfig extends AbstractMybatisConfig{
    }
    

    启动或部署应用

    • 如果是通过运行main方法来启动应用,应用程序会读取以下配置信息,来获取应该使用哪个环境的配置信息。
    # application.yml文件或application.properties文件
    # 表示使用开发环境的配置
    spring:
      profiles:
        active: dev
    
    • 如果是通过运行jar包来部署应用,我们可以通过设置启动参数,来告诉应用程序,应该使用哪个环境的配置信息。
    # 表示使用生产环境的配置
    java -jar xxx.jar --spring.profiles.active=prod
    

    相关文章

      网友评论

          本文标题:Spring Boot实现多环境下配置切换

          本文链接:https://www.haomeiwen.com/subject/eopkoqtx.html