Java-SptingBoot 配置双数据源

Java配置双数据源

1.MysqlDatasourceConfig

@Configuration
@MapperScan(basePackages = MysqlDatasourceConfig.PACKAGE, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDatasourceConfig {

	@Autowired
	private PageConfig config;

    /**mysqldao扫描路径*/
    static final String PACKAGE = "org/cfang/modules/**/mapper";
    /**mybatis mapper扫描路径*/
    static final String MAPPER_LOCATION = "org/cfang/modules/**/mapper/*.xml";

    /**
     * 拿到DataSource
     * @ConfigurationProperties 获取 配置文件 spring.datasource.druid.mysql下的值
     * @return
     */
    @Primary
    @Bean(name = "mysqldatasource")
    @ConfigurationProperties("spring.datasource.druid.mysql")
    public DataSource mysqlDataSource() {

        DruidDataSource dataSource= DruidDataSourceBuilder.create().build();
        return dataSource;
    }

    /**
     * 配置事务   Primary注解是以这个为主数据源
     * @return
     */
    @Bean(name = "mysqlTransactionManager")
    @Primary
    public DataSourceTransactionManager mysqlTransactionManager() {
        return new DataSourceTransactionManager(mysqlDataSource());
    }

    @Bean(name = "mysqlSqlSessionFactory")
    @Primary
    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqldatasource") DataSource dataSource)
            throws Exception {
//        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
		final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
		// 设置mybatis-plus分页插件
		sessionFactory.setPlugins(config.paginationInterceptor());
        //如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
        sessionFactory.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources(MysqlDatasourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}

2.OracleDatasourceConfig

@Configuration
@MapperScan(basePackages = OracleDatasourceConfig.PACKAGE,
        sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleDatasourceConfig {

	@Autowired
	private PageConfig config;

    /**oralce扫描路径*/
    static final String PACKAGE = "org/cfang/modules/**/hisMapper";
    /**mybatis mapper扫描路径*/
    static final String MAPPER_LOCATION = "org/cfang/modules/**/hisMapper/*.xml";

    @Bean(name = "oracledatasource")
    @ConfigurationProperties("spring.datasource.druid.oracle")
    public DataSource oracleDataSource() {

        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "oracleTransactionManager")
    public DataSourceTransactionManager oracleTransactionManager() {
        return new DataSourceTransactionManager(oracleDataSource());
    }

    @Bean(name = "oracleSqlSessionFactory")
    public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracledatasource") DataSource dataSource) throws Exception {
//        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
		final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
		// 设置mybatis-plus分页插件
		sessionFactory.setPlugins(config.paginationInterceptor());
        //如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(OracleDatasourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}

3.PageConfig

@Configuration
public class PageConfig {

	@Bean
	public PaginationInterceptor paginationInterceptor() {
		return new PaginationInterceptor();
	}
}
注意事项:
1.配置双数据源后 Application 中 @MapperScan 扫描路径要去掉,不然会冲突,导致找不到数据源
2.mybatis-plus分页插件会无法使用 解决办法:
	1.mybatis-plus分页插件配置类 —— PageConfig 
	2.mysql数据源配置工具类,添加mybatis-plus分页插件
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值