應(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