栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring boot2 + mybatis + druid多数据源配置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring boot2 + mybatis + druid多数据源配置

Spring boot2 + mybatis + druid多数据源配置

文章目录
  • 需引入的Jar包
  • 项目目录结构
  • application.yml配置
  • 数据源配置
    • 数据源1配置
    • 数据源2配置

需引入的Jar包
dependencies{
	implementation "org.springframework.boot:spring-boot-starter:2.1.18.RELEASE"
	implementation "com.alibaba:druid-spring-boot-starter:1.1.20" 
	implementation "org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.1"
}
项目目录结构

application.yml配置
# Spring settings
spring:
  profiles:
    active: dev
   
  # datasource settings
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 数据源1
      primary:
        url: jdbc:mysql://${PRIMARY_MYSQL_HOST}:${PRIMARY_MYSQL_PORT}/${PRIMARY_MYSQL_DATAbase}?useSSL=false&characterEncoding=utf8&useUnicode=true&zeroDateTimeBehavior=convertToNull
        username: ${PRIMARY_MYSQL_USERNAME}
        password: ${PRIMARY_MYSQL_PASSWORD}
      # 数据源2
      secondary:
        url: jdbc:mysql://${SECONDARY_MYSQL_HOST}:${SECONDARY_MYSQL_PORT}/${SECONDARY_MYSQL_DATAbase}?useSSL=false&characterEncoding=utf8&useUnicode=true&zeroDateTimeBehavior=convertToNull
        username: ${SECONDARY_MYSQL_USERNAME}
        password: ${SECONDARY_MYSQL_PASSWORD}
      # 初始连接数
      initial-size: 5
      # 最大连接池数量
      max-active: 20
      # 最小连接池数量
      min-idle: 5
      # 获取连接最大等待时间
      max-wait: 60000
      # 打开PSCache,并且指定每个连接上PSCache的大小 
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      max-open-prepared-statements: 20
      # 用来检测连接是否有效的sql,要求是一个查询语句
      validation-query: SELECt 1 FROM DUAL
      #申请连接时执行validationQuery检测连接是否有效
      test-on-borrow: false
      # 归还连接时执行validationQuery检测连接是否有效
      test-on-return: false
      # 设置从连接池获取连接时是否检查连接有效
      test-while-idle: true
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      filters: stat,wall

数据源配置 数据源1配置

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
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.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;


@Configuration
@MapperScan(basePackages = {"数据源1的dao类存放目录"}, sqlSessionFactoryRef = "primarySqlSessionFactory")

public class PrimaryDataSourceConfig {

    // mapper的xml文件存放路径
    private static final String MAPPER_LOCAL = "classpath:mybatis/mapper/primary/*.xml";

    @ConfigurationProperties("spring.datasource.druid.primary") // 对应applicatio.yml文件上的配置路径
    @Primary
    @Bean(name = "primaryDataSource")
    public DruidDataSource druidDataSource() {
        return new DruidDataSource();
    }

    @Bean(name = "primaryTransactionManager")
    @Primary
    public DataSourceTransactionManager primaryTransactionManager() {
        return new DataSourceTransactionManager(druidDataSource());
    }


    @Bean(name = "primarySqlSessionFactory")
    @Primary
    public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DruidDataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml")); // mybatis配置文件路径
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCAL));

        return sessionFactoryBean.getObject();
    }

}

数据源2配置

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;


@Configuration
@MapperScan(basePackages = {"数据源2的dao类存放路径"}, sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondaryDataSourceConfig {

    // mapper的xml文件存放路径
    private static final String MAPPER_LOCAL = "classpath:mybatis/mapper/secondary/*.xml";

    @Bean(name = "secondaryDataSource")
    @ConfigurationProperties("spring.datasource.druid.secondary") // 对应applicatio.yml文件上的配置路径
    public DruidDataSource druidDataSource() {
        return new DruidDataSource();
    }


    @Bean(name = "secondaryTransactionManager")
    public DataSourceTransactionManager secondaryTransactionManager() {
        return new DataSourceTransactionManager(druidDataSource());
    }


    @Bean(name = "secondarySqlSessionFactory")
    public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DruidDataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml")); // mybatis配置文件路径
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCAL));
        return sessionFactoryBean.getObject();
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446182.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号