springboot整合mybatis多数据源

application.properties


#mysql
spring.datasource.primary.jdbc-url=@db.primaryUrl@
spring.datasource.primary.username= @db.primarUsername@
spring.datasource.primary.password= @db.primaryPassword@
spring.datasource.primary.driverClassName= @db.primaryDriverClassName@

#sqlserver
spring.datasource.secondary.jdbc-url=@db.secondUrl@
spring.datasource.secondary.username=@db.secondUsername@
spring.datasource.secondary.password=@db.secondPassword@
spring.datasource.secondary.driverClassName=@db.secondDriverClassName@

第一个数据源的配置

package com.eyee.distribution.config;

import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;


import javax.sql.DataSource;

/**
 * mysql数据源
 *auth
 */
@Configuration
@MapperScan(basePackages = {"com.eyee.distribution.mapper.mysql"},sqlSessionFactoryRef ="primarySqlSessionFactory",sqlSessionTemplateRef ="primarySqlSessionTemplate")
public class PrimaryDataSourceConfig {

    /**
     * 读取peropertie注入第一个数据源,注意这里如果不设置primary会报错
     * @return
     */

    @Bean(name = "primaryDataSource")
    @Qualifier("primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource CreatePrimaryDataSource()   {
     //指定使用hikari连接池
        return   DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    /**
     * 将第一个数据源注入工厂
     * @param dataSource
     * @return
     * @throws Exception
     */

    @Bean(name="primarySqlSessionFactory")
    public SqlSessionFactory primarySqlSessionFactory( @Qualifier("primaryDataSource")DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        //设置数据源
        sqlSessionFactoryBean.setDataSource(dataSource);
        //扫描xml的路径地址
       // sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mybatis/mysql/*Mapper.xml"));
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("pageHelper.xml"));//分页
        return sqlSessionFactoryBean.getObject();
    }
    /**
     * 配置事务管理器
     */

    @Bean
    public DataSourceTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource")DataSource dataSource) throws Exception {
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * 查询使用的模板类注意这里一定要独立分开各自的模板类
     * @param sqlSessionFactory
     * @return
     * @throws Exception
     */

    @Bean("primarySqlSessionTemplate")
    public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory); // 使用上面配置的Factory
        return template;
    }
}

第二个数据源

package com.eyee.distribution.config;

import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * sqlserver数据源
 */
@Configuration
@MapperScan(basePackages = {"com.eyee.distribution.mapper.sqlserver"},sqlSessionFactoryRef ="secondarySqlSessionFactory",sqlSessionTemplateRef ="secondarySqlSessionTemplate" )
public class SencondarDatasourceConfig {
    @Primary
    @Bean(name = "scondaryDataSource")
    @Qualifier("scondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource CreateSecondaryDataSource()   {

        return   DataSourceBuilder.create().type(HikariDataSource.class).build();
    }
    @Primary
    @Bean(name="secondarySqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("scondaryDataSource")DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        //sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*/mybatis/sqlserver/*"));
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("pageHelper.xml"));
        return sqlSessionFactoryBean.getObject();
    }
    /**
     * 配置事务管理器
     */
    @Primary
    @Bean
    public DataSourceTransactionManager transactionManager(@Qualifier("scondaryDataSource")DataSource dataSource) throws Exception {
        return new DataSourceTransactionManager(dataSource);
    }
    @Primary
    @Bean("secondarySqlSessionTemplate")
    public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory); // 使用上面配置的Factory
        return template;
    }
}

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值