Spring Boot實(shí)現(xiàn)多環(huán)境下配置切換

應(yīng)用程序在不同的環(huán)境下,會有不同的配置信息。例如數(shù)據(jù)庫連接信息,開發(fā)、測試和生產(chǎn)每個環(huán)境都有自己的配置信息。使用Spring Boot的Profile,可以幫助我們實(shí)現(xiàn)多場景下的配置切換,方便開發(fā)中進(jìn)行測試和部署生產(chǎn)環(huán)境。下面是數(shù)據(jù)庫連接信息多配置切換的例子。

添加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來獲取配置文件信息,這次從環(huán)境中獲取。

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;
    }
}

開發(fā)環(huán)境配置類

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 {
}

生產(chǎn)環(huán)境配置類

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{
}

啟動或部署應(yīng)用

  • 如果是通過運(yùn)行main方法來啟動應(yīng)用,應(yīng)用程序會讀取以下配置信息,來獲取應(yīng)該使用哪個環(huán)境的配置信息。
# application.yml文件或application.properties文件
# 表示使用開發(fā)環(huán)境的配置
spring:
  profiles:
    active: dev
  • 如果是通過運(yùn)行jar包來部署應(yīng)用,我們可以通過設(shè)置啟動參數(shù),來告訴應(yīng)用程序,應(yīng)該使用哪個環(huán)境的配置信息。
# 表示使用生產(chǎn)環(huán)境的配置
java -jar xxx.jar --spring.profiles.active=prod
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容