springboot使用mybatisplus的多数据源,连接三个数据库

springboot使用mybatisplus的多数据源,连接三个数据库,进行操作。

看配置数据源文件。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/enterprise_wallet?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    ds2:
      type: com.alibaba.druid.pool.DruidDataSource
      druid:
        # 特别注意:java 9以后需要将com.mysql.jdbc.Driver  改为  com.mysql.cj.jdbc.Driver即可
        # 否则报错:Loading class `com.mysql.jdbc.Driver'. This is deprecated.
        driver-class-name: com.mysql.cj.jdbc.Driver
        #基本属性
        url: jdbc:mysql://localhost:3306/enterprise_coin?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        #配置初始化大小/最小/最大[仅用于测试,生成环境需要修改哦]
        initial-size: 1
        min-idle: 1
        max-active: 20
        #获取连接等待超时时间
        max-wait: 60000
        #间隔多久进行一次检测,检测需要关闭的空闲连接
        time-between-eviction-runs-millis: 60000
        #一个连接在池中最小生存的时间
        min-evictable-idle-time-millis: 300000
        #指定获取连接时连接校验的sql查询语句
        validation-query: SELECT 'x'
        #验证连接的有效性
        test-while-idle: true
        #获取连接时候验证,会影响性能(不建议true)
        test-on-borrow: false
        #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
        pool-prepared-statements: false
        max-pool-prepared-statement-per-connection-size: 20
    ds3:
      type: com.alibaba.druid.pool.DruidDataSource
      druid:
        # 特别注意:java 9以后需要将com.mysql.jdbc.Driver  改为  com.mysql.cj.jdbc.Driver即可
        # 否则报错:Loading class `com.mysql.jdbc.Driver'. This is deprecated.
        driver-class-name: com.mysql.cj.jdbc.Driver
        #基本属性
        url: jdbc:mysql://localhost:3306/enterprise_transation?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        #配置初始化大小/最小/最大[仅用于测试,生成环境需要修改哦]
        initial-size: 1
        min-idle: 1
        max-active: 20
        #获取连接等待超时时间
        max-wait: 60000
        #间隔多久进行一次检测,检测需要关闭的空闲连接
        time-between-eviction-runs-millis: 60000
        #一个连接在池中最小生存的时间
        min-evictable-idle-time-millis: 300000
        #指定获取连接时连接校验的sql查询语句
        validation-query: SELECT 'x'
        #验证连接的有效性
        test-while-idle: true
        #获取连接时候验证,会影响性能(不建议true)
        test-on-borrow: false
        #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
        pool-prepared-statements: false
        max-pool-prepared-statement-per-connection-size: 20

这是三个配置数据源的属性。下面是对应的三个配置文件:

package com.xnpool.common.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

import javax.sql.DataSource;
@Configuration
public class DadaSourceConfig {


    @Bean
    @Primary
    public JdbcTemplate newJdbcTemplate(
            DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean
    @Primary
    public NamedParameterJdbcTemplate primaryNamedParameterJdbcTemplate(
            DataSource dataSource) {
        return new NamedParameterJdbcTemplate(dataSource);
    }
}

第一个数据源文件,基本上看不出来什么。和只有一个数据源是一样的。特殊的地方在第二个第三个数据源文件这里:

package com.xnpool.common.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
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.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = {"com.xnpool.common.mapper.ds2"},
        sqlSessionTemplateRef = "db2SqlSessionTemplate")
public class MybatisSecondDbConfig {

    @Bean
    @Qualifier("ds2")//指定bean的名称  第二个dataSource的beanname
    @ConfigurationProperties(prefix = "spring.datasource.ds2.druid")
    public DataSource oracleDataSource2() {
        return DataSourceBuilder.create().type(DruidDataSource.class).build();
    }


    @Bean(name = "db2SqlSessionFactory")
    public SqlSessionFactory secondSqlSessionFactory(@Qualifier("ds2") DataSource dataSource) throws Exception {
        //SqlSessionFactoryBean bean = new SqlSessionFactoryBean();//mybatis的
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();//mybatisplus的
        bean.setDataSource(dataSource);
        //由于拆分了包结构,这里指定mapper
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/ds2/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "db2TransactionManager")
    public DataSourceTransactionManager secondTransactionManager(@Qualifier("ds2") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "db2SqlSessionTemplate")
    public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}
package com.xnpool.common.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
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.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = {"com.xnpool.common.mapper.ds3"},
        sqlSessionTemplateRef = "db3SqlSessionTemplate")
public class MybatisThreeDbConfig {

    @Bean
    @Qualifier("ds3")//指定bean的名称 第三个dataSource的beanname
    @ConfigurationProperties(prefix = "spring.datasource.ds3.druid")
    public DataSource oracleDataSource3() {
        return DataSourceBuilder.create().type(DruidDataSource.class).build();
    }


    @Bean(name = "db3SqlSessionFactory")
    public SqlSessionFactory secondSqlSessionFactory(@Qualifier("ds3") DataSource dataSource) throws Exception {
        //SqlSessionFactoryBean bean = new SqlSessionFactoryBean();//mybatis的
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();//mybatisplus的
        bean.setDataSource(dataSource);
        //由于拆分了包结构,这里指定mapper
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/ds3/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "db3TransactionManager")
    public DataSourceTransactionManager secondTransactionManager(@Qualifier("ds3") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "db3SqlSessionTemplate")
    public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("db3SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

第二第三个配置数据源,是需要指定其它的bean名称的。主要还是它们扫描的路径不一样。下面是一个目录截图:

三个数据源就此配置完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值