package com.aidijing.config; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; import java.util.HashMap; import java.util.Map; /** * @author : 披荆斩棘 * @date : 2017/9/6 */ @Configuration public class DataSourceConfig { /** * 动态数据源配置 * * @param dataSourceOrder : 订单数据源 * @param dataSourceUser : 用户数据源 * @return */ @Bean public DynamicMultipleDataSource multipleDataSource ( @Qualifier( GlobalConstant.ORDER_DATA_SOURCE_KEY ) DataSource dataSourceOrder , @Qualifier( GlobalConstant.USER_DATA_SOURCE_KEY ) DataSource dataSourceUser ) { DynamicMultipleDataSource dynamicMultipleDataSource = new DynamicMultipleDataSource(); Map< Object, Object > targetDataSources = new HashMap<>(); targetDataSources.put( GlobalConstant.ORDER_DATA_SOURCE_KEY , dataSourceOrder ); targetDataSources.put( GlobalConstant.USER_DATA_SOURCE_KEY , dataSourceUser ); dynamicMultipleDataSource.setTargetDataSources( targetDataSources ); dynamicMultipleDataSource.setDefaultTargetDataSource( dataSourceOrder ); return dynamicMultipleDataSource; } @Primary @Bean @ConfigurationProperties( prefix = "spring.datasource.druid.order" ) public DataSource dataSourceOrder () { return DruidDataSourceBuilder.create().build(); } @Bean @ConfigurationProperties( prefix = "spring.datasource.druid.user" ) public DataSource dataSourceUser () { return DruidDataSourceBuilder.create().build(); } @Bean public SqlSessionFactory sqlSessionFactory ( DynamicMultipleDataSource dynamicMultipleDataSource ) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource( dynamicMultipleDataSource ); return sqlSessionFactoryBean.getObject(); } @Bean public DataSourceTransactionManager transactionManager ( DynamicMultipleDataSource dynamicMultipleDataSource ) throws Exception { return new DataSourceTransactionManager( dynamicMultipleDataSource ); } @Bean @Primary public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean ( DynamicMultipleDataSource dynamicMultipleDataSource ) { MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource( dynamicMultipleDataSource ); return sqlSessionFactoryBean; } }