双数据库查询报表问题案例详解

需要引入的依赖


        <!-- MySQL 连接驱动依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector}</version>
        </dependency>

<!--mysql版本可以不同-->

yml的配置

url一般写成jdbc-url(不要忘记) 这两个数据库不是主从复制,是完全并行的,master和slave是因为要区分数据库

spring:
  application:
    name: multi-datasource
 
 ## 主数据源配置
  datasource:
    master:
      jdbc-url : jdbc:mysql://10.11.1.152:3306/yoga
      username : root
      password : YPlus_Root@2019
      driver-class-name : com.mysql.jdbc.Driver
 
 ##副数据源配置
    slave:
      jdbc-url: jdbc:mysql://10.11.1.152:3306/yoga_report
      username: root
      password: YPlus_Root@2019
      driver-class-name: com.mysql.jdbc.Driver

配置类

这里需要两个配置类来对应每个数据源,不理解不要紧,需要把注释的地方换成数据库对应的文件就行了,dao是只能查master数据源里面的,dao2只能查slave数据源里面的

@Configuration

//找到对应的Dao文件

@MapperScan(basePackages = "yplus.reports.web.dao",sqlSessionFactoryRef ="masterSqlSessionFactory" )

public class MasterDataSourceConfig {


 private static final String MAPPER_LOCATION = "classpath*:mapper/*.xml";//映射的xml文件
 @Primary
    @Bean(name = "masterDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.master")//数据源别名//数据源别名
    public DataSource dataSource(){
     DataSource build= DataSourceBuilder.create().build();
     return build;
 }

 @Bean(name="masterTransactionManager")
    @Primary
    public PlatformTransactionManager dataSourceTransactionManager(@Qualifier("masterDataSource")DataSource dataSource){
     return  new DataSourceTransactionManager(dataSource);

 }

 @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource")DataSource dataSource) throws Exception {
     final SqlSessionFactoryBean sessionFactoryBean=new SqlSessionFactoryBean();
     sessionFactoryBean.setDataSource(dataSource);
     sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MasterDataSourceConfig.MAPPER_LOCATION));
    return  sessionFactoryBean.getObject();
 }

}
@Configuration

//找到对应的Dao文件

@MapperScan(basePackages = "yplus.reports.web.dao2",sqlSessionFactoryRef ="slaveSqlSessionFactory" )

public class SlaveDataSourceConfig {

    private static final String MAPPER_LOCATION="classpath*:mapper2/*.xml";//映射的xml文件
    @Bean(name = "slaveDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.slave")//数据源别名
    public DataSource dataSource(){
        DataSource build= DataSourceBuilder.create().build();
        return build;
    }
    @Bean(name = "slaveTransactionManager")
    public PlatformTransactionManager dataSourceTransactionManager(@Qualifier("slaveDataSource")DataSource dataSource){
        return  new DataSourceTransactionManager(dataSource);
    }
@Bean(name = "slaveSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource")DataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(SlaveDataSourceConfig.MAPPER_LOCATION));
        return  sessionFactoryBean.getObject();
}

}

 结束语:

目前只能做到各查各的的数据库,一条Sql不能同时跨数据源 JOIN 到一起,还需要代码来实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值