SpringBoot-Hika默认连接池配置多数据源

  • 版本:
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
  • mysql-mybatis依赖:
 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.36</version>
  </dependency>
  <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
  </dependency>
  • 配置文件:
#主数据源
spring.datasource.primary.driverClassName=com.mysql.jdbc.Driver
spring.datasource.primary.url=jdbc:mysql://1ojsnl87fj3-olwl1znqzk3x.cn-hangzhou.datalakeanalytics.aliyuncs.com:10000/abc?useUnicode=true&characterEncoding=UTF-8
spring.datasource.primary.username=oa_1ojsnl87fj3
spring.datasource.primary.password=123456abcD
spring.datasource.primary.mapperLocations=classpath:mapper/primary/*.xml
#数据源2
spring.datasource.db2.driverClassName=com.mysql.jdbc.Driver
spring.datasource.db2.url=jdbc:mysql://localhost:3307/syhd_edu_video?useUnicode=true&characterEncoding=UTF-8
spring.datasource.db2.username=root
spring.datasource.db2.password=1
spring.datasource.db2.mapperLocations=classpath:mapper/db2/*.xml
  • 数据源依赖:
package jykt.dla.com.cn.jyktdla.core.ds;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author jxd
 * @version 1.0 *
 * @date 2021/6/17 15:10
 */
@Builder
@AllArgsConstructor()
@NoArgsConstructor
@Data
public class DataSourceModel {
    /**
     * 驱动
     */
    private String driverClassName;
    /**
     * 驱动地址
     */
    private String url;
    /**
     * 数据库连接名
     */
    private String username;
    /**
     * 数据库密码
     */
    private String password;
    /**
     * mybatis mapper.xml 地址
     */
    private String mapperLocations;
}


package jykt.dla.com.cn.jyktdla.core.ds;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 数据源二 模型
 *
 * @author jxd
 * @version 1.0 *
 * @date 2021/6/17 14:20
 */
@Component
@ConfigurationProperties(prefix = "spring.datasource.db2")
public class Db2DataSourceModel extends DataSourceModel {

}


package jykt.dla.com.cn.jyktdla.core.ds;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 主数据源模型
 *
 * @author jxd
 * @version 1.0 *
 * @date 2021/6/17 14:20
 */
@Component
@ConfigurationProperties(prefix = "spring.datasource.primary")
public class PrimaryDataSourceModel extends DataSourceModel {

}
package jykt.dla.com.cn.jyktdla.core.ds;

import com.zaxxer.hikari.HikariDataSource;

/**
 * HikariDataSource 数据源工厂 根据不同数据源返回不同数据源配置对象
 *
 * @author jxd
 * @version 1.0 *
 * @date 2021/6/17 15:05
 */
public class DataSourceModelFactory {


    /**
     * 获取数据源
     * dataSourceModel 数据源模型父对象
     *
     * @return
     * @author jxd
     * @date 2021/6/17 15:06
     */
    public static HikariDataSource getHikariDataSource(DataSourceModel dataSourceModel) {
        HikariDataSource hikariDataSource = new HikariDataSource();
        hikariDataSource.setDriverClassName(dataSourceModel.getDriverClassName());
        hikariDataSource.setJdbcUrl(dataSourceModel.getUrl());
        hikariDataSource.setUsername(dataSourceModel.getUsername());
        hikariDataSource.setPassword(dataSourceModel.getPassword());
        return hikariDataSource;
    }
}

  • 数据源配置:
package jykt.dla.com.cn.jyktdla.core.config;

import com.zaxxer.hikari.HikariDataSource;
import jykt.dla.com.cn.jyktdla.core.ds.DataSourceModelFactory;
import jykt.dla.com.cn.jyktdla.core.ds.PrimaryDataSourceModel;
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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

/**
 * 主库
 *
 * @author jxd
 * @version 1.0 *
 * @date 2021/6/17 14:06
 */
@Configuration
@MapperScan(basePackages = "jykt.dla.com.cn.jyktdla.mapper.primary", sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {

    @Autowired
    private PrimaryDataSourceModel primaryDataSourceModel;


    /**
     * 配置数据源
     *
     * @return
     * @author jxd
     * @date 2021/6/17 14:40
     */
    @Bean(name = "primaryDataSource")
    public HikariDataSource getPrimaryDateSource() {
        return DataSourceModelFactory.getHikariDataSource(primaryDataSourceModel);
    }


    /**
     * session
     *
     * @param datasource
     * @return
     * @author jxd
     * @date 2021/6/17 14:40
     */
    @Bean(name = "primarySqlSessionFactory")
    public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource datasource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        //mybatis扫描xml所在位置
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(primaryDataSourceModel.getMapperLocations()));
        return bean.getObject();
    }


    @Bean("primarySqlSessionTemplate")
    public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}


package jykt.dla.com.cn.jyktdla.core.config;

import com.zaxxer.hikari.HikariDataSource;
import jykt.dla.com.cn.jyktdla.core.ds.DataSourceModelFactory;
import jykt.dla.com.cn.jyktdla.core.ds.Db2DataSourceModel;
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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

/**
 * db2数据源
 *
 * @author jxd
 * @version 1.0 *
 * @date 2021/6/17 14:06
 */
@Configuration
@MapperScan(basePackages = "jykt.dla.com.cn.jyktdla.mapper.db2", sqlSessionFactoryRef = "db2SqlSessionFactory")
public class Db2DataSourceConfig {

    @Autowired
    private Db2DataSourceModel db2DataSourceModel;


    /**
     * 配置数据源
     *
     * @return
     * @author jxd
     * @date 2021/6/17 14:40
     */
    @Bean(name = "db2DataSource")
    public HikariDataSource getdb2DateSource() {
        return DataSourceModelFactory.getHikariDataSource(db2DataSourceModel);
    }

    /**
     * session
     *
     * @param datasource
     * @return
     * @author jxd
     * @date 2021/6/17 14:40
     */
    @Bean(name = "db2SqlSessionFactory")
    public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource datasource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        //mybatis扫描xml所在位置
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(db2DataSourceModel.getMapperLocations()));
        return bean.getObject();
    }


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

  • 不同的数据源mapper接口跟xml文件放到不同的位置下,单元测试即可。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java之葵花宝典

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值