package com.stylefeng.guns.config.datasource;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.stylefeng.guns.core.config.properties.DruidProperties;
import com.stylefeng.guns.core.config.properties.MutiDataSourceProperties;
import com.stylefeng.guns.core.datascope.DataScopeInterceptor;
import com.stylefeng.guns.core.mutidatasource.DynamicDataSource;
import com.stylefeng.guns.core.mutidatasource.aop.MultiSourceExAop;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.sql.SQLException;
import java.util.HashMap;
/**
* 多数据源配置
*
* 注:由于引入多数据源,所以让spring事务的aop要在多数据源切换aop的后面 * * @author stylefeng * @Date 2017/5/20 21:58 */ @Configuration @ConditionalOnProperty(prefix = "guns.muti-datasource", name = "open", havingValue = "true") @EnableTransactionManagement(order = 2) @MapperScan(basePackages = {"com.stylefeng.guns.modular.*.dao","com.stylefeng.guns.multi.mapper"}) public class MultiDataSourceConfig { @Bean @ConfigurationProperties(prefix = "guns.muti-datasource") public MutiDataSourceProperties mutiDataSourceProperties() { return new MutiDataSourceProperties(); } @Bean public MultiSourceExAop multiSourceExAop() { return new MultiSourceExAop(); } /** * guns的数据源 */ private DruidDataSource dataSource(DruidProperties druidProperties) { DruidDataSource dataSource = new DruidDataSource(); druidProperties.config(dataSource); return dataSource; } /** * 多数据源,第二个数据源 */ private DruidDataSource bizDataSource(DruidProperties druidProperties, MutiDataSourceProperties mutiDataSourceProperties) { DruidDataSource dataSource = new DruidDataSource(); druidProperties.config(dataSource); mutiDataSourceProperties.config(dataSource); return dataSource; } /** * 多数据源连接池配置 */ @Bean public DynamicDataSource mutiDataSource(DruidProperties druidProperties, MutiDataSourceProperties mutiDataSourceProperties) { DruidDataSource dataSourceGuns = dataSource(druidProperties); DruidDataSource bizDataSource = bizDataSource(druidProperties, mutiDataSourceProperties); try { dataSourceGuns.init(); bizDataSource.init(); } catch (SQLException sql) { sql.printStackTrace(); } DynamicDataSource dynamicDataSource = new DynamicDataSource(); HashMap