spring boot不同的包采用不同的数据源

181 阅读1分钟

com.xxxx.oracle.xxxxx1包下使用这个数据源

@Slf4j
@Configuration
@MapperScan(basePackages = xxx1OracleDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "xxx1OracleSqlSessionFactory")
public class xxx1OracleDataSourceConfig {
    /**
     * PACKAGE类型是public 主数据源 持久层就要扫描master包下
     */
    public static final String PACKAGE = "com.xxxx.oracle.xxxxx1";
    /**
     * 主数据源扫描master下面的 *.xml
     */
    public static final String MAPPER_LOCATION = "classpath*:mybatis/mapper/extend/oracle/xxx1/**/*.xml";
    @Value("${oracle.xxx1.url}")
    private String url;

    @Value("${oracle.xxx1.username}")
    private String username;

    @Value("${oracle.xxx1.password}")
    private String password;

    @Value("${oracle.driverClassName}")
    private String driverClass;

    /** 用来检测连接是否有效的sql,要求是一个查询语句 */
    @Value("${spring.datasource.druid.oracle-validation-query}")
    private static String validationQuery;

    @Bean(name = "xxx1OracleDataSource")
    public DataSource xxx1OracleDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setDriverClassName(driverClass);
        dataSource.setValidationQuery(validationQuery);

        DruidConfiguration.setDruidConfig(dataSource);
        return dataSource;
    }


    @Bean(name = "xxx1OracleTransactionManager")
    public DataSourceTransactionManager xxx1OracleTransactionManager() {
        return new DataSourceTransactionManager(taikangOracleDataSource());
    }

    @Bean(name = "xxx1OracleSqlSessionFactory")
    public SqlSessionFactory xxx1OracleSqlSessionFactory(@Qualifier("xxx1OracleDataSource") DataSource xxx1OracleDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(taikangOracleDataSource);
        org.apache.ibatis.session.Configuration configuration=new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true);
//        configuration.setLogImpl(StdOutImpl.class);
        sessionFactory.setConfiguration(configuration);

        // 分页插件
        sessionFactory.setPlugins(new Interceptor[] {DruidConfiguration.createInterceptor()});

        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
        return sessionFactory.getObject();
    }

}

com.xxx2.dao.extend.mysql.platform包下的使用该数据源

 */
@Slf4j
@Configuration
@MapperScan(basePackages = DefaultMySqlDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "defaultMysqlSqlSessionFactory")
public class DefaultMySqlDataSourceConfig {
    /**
     * PACKAGE类型是public 持久层所在的包
     */
    public static final String PACKAGE = "com.xxx2.dao.extend.mysql.platform";
    /**
     * 主数据源扫描master下面的 *.xml
     */
    public static final String MAPPER_LOCATION = "classpath*:mybatis/mapper/extend/mysql/platform/**/*.xml";

    @Value("${mysql.platform.url}")
    private String url;

    @Value("${mysql.platform.username}")
    private String username;

    @Value("${mysql.platform.password}")
    private String password;

    @Value("${mysql.driverClassName}")
    private String driverClass;

    @Value("${spring.datasource.druid.mysql-validation-query}")
    private static String validationQuery;


    @Bean(name = "defaultMysqlDataSource")
    public DataSource defaultMysqlDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setDriverClassName(driverClass);
        dataSource.setValidationQuery(validationQuery);

        DruidConfiguration.setDruidConfig(dataSource);
        return dataSource;
    }

    /**
     * 配置事务管理器,在 @Transactional代码上指定
     * 如@Transactional(rollbackFor = Exception.class, transactionManager = "defaultMysqlTransactionManager")
     */
    @Bean(name = "defaultMysqlTransactionManager")
    public DataSourceTransactionManager defaultMysqlTransactionManager() {
        return new DataSourceTransactionManager(defaultMysqlDataSource());
    }


    @Primary
    @Bean(name = "defaultMysqlSqlSessionFactory")
    public SqlSessionFactory defaultMysqlSqlSessionFactory(@Qualifier("defaultMysqlDataSource") DataSource defaultMysqlDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(defaultMysqlDataSource);
        org.apache.ibatis.session.Configuration configuration=new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true);
//        configuration.setLogImpl(StdOutImpl.class);
        sessionFactory.setConfiguration(configuration);

        // 分页插件
        sessionFactory.setPlugins(new Interceptor[] {DruidConfiguration.createInterceptor()});

        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(DefaultMySqlDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}