packagedemo.springboot.conf;importjava.util.HashMap;importjava.util.Map;importjavax.sql.DataSource;importorg.apache.ibatis.session.SqlSessionFactory;importorg.mybatis.spring.SqlSessionFactoryBean;importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importorg.springframework.core.env.Environment;importorg.springframework.core.io.support.PathMatchingResourcePatternResolver;importcom.alibaba.druid.pool.DruidDataSource;importdemo.springboot.enums.DatabaseType;/***
*@authordanny.yao
* springboot集成mybatis基本入口
* 1、创建数据源
* 2、创建SqlSessionFactory*/@Configuration
@MapperScan(basePackages="demo.springboot.mapper", sqlSessionFactoryRef="sessionFactory")public classMybatisConfig {
@Autowired
Environment environment;
@Value("${datasource.jdbc.driverClassName}")privateString dbDriver;
@Value("${datasource.jdbc.url}")privateString dbUrl;
@Value("${datasource.jdbc.username}")privateString dbUsername;
@Value("${datasource.jdbc.password}")privateString dbPassword;
@Value("${datasource.jdbc.url_stg}")privateString dbUrl_stg;
@Value("${datasource.jdbc.username_stg}")privateString dbUsername_stg;
@Value("${datasource.jdbc.password_stg}")privateString dbPassword_stg;/*** 创建 local环境 dataSource
*@throwsException*/@Bean(name="dataSourceFunctional")public DataSource dataSourceLocal() throwsException{
DruidDataSource dataSource= newDruidDataSource();
dataSource.setDriverClassName(dbDriver);
dataSource.setUrl(dbUrl);
dataSource.setUsername(dbUsername);
dataSource.setPassword(dbPassword);returndataSource;
}/*** 创建 回归环境 dataSource
*@throwsException*/@Bean(name="dataSourceRegression")public DataSource dataSourceStaging() throwsException{
DruidDataSource dataSource= newDruidDataSource();
dataSource.setDriverClassName(dbDriver);
dataSource.setUrl(dbUrl_stg);
dataSource.setUsername(dbUsername_stg);
dataSource.setPassword(dbPassword_stg);returndataSource;
}/*** 1、创建动态数据源
*@throwsException
* @Primary该注解表示在同一个接口有多个类可以注入的时候,默认选择哪个,而不是让@Autowired报错*/@Bean(name="dynamicDataSource")
@Primarypublic DynamicDataSource DataSource(@Qualifier("dataSourceFunctional") DataSource dataSourceFunctional,
@Qualifier("dataSourceRegression") DataSource dataSourceRegression){
Map targetDataSource = new HashMap<>();
targetDataSource.put(DatabaseType.function, dataSourceFunctional);
targetDataSource.put(DatabaseType.regression, dataSourceRegression);
DynamicDataSource dataSource= newDynamicDataSource();
dataSource.setTargetDataSources(targetDataSource);
dataSource.setDefaultTargetDataSource(dataSourceFunctional);returndataSource;
}/*** 2、根据数据源创建SqlSessionFactory
*@throwsException*/@Bean(name="sessionFactory")public SqlSessionFactory sessionFactory(@Qualifier("dynamicDataSource")DynamicDataSource dataSource) throwsException{
SqlSessionFactoryBean sessionFactoryBean= newSqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver= newPathMatchingResourcePatternResolver();
sessionFactoryBean.setMapperLocations(resolver.getResources(environment.getProperty("mybatis.mapperLocations"))); //*Mapper.xml位置
returnsessionFactoryBean.getObject();
}
}