加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

SpringBoot和Mybatis配置多数据源连接多个数据库

发布时间:2021-07-06 05:26:21 所属栏目:大数据 来源: https://www.cnblogs.com/xiado
导读:@H_403_0@? @H_403_0@目前业界操作数据库的框架一般是?Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑。在SpringBoot中也可以实现多数据源并配合Mybatis框架编写xml文件来执行sql。在SpringBoot中,配置多数据源的方式十分
@H_403_0@?

@H_403_0@目前业界操作数据库的框架一般是?Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑。在SpringBoot中也可以实现多数据源并配合Mybatis框架编写xml文件来执行sql。在SpringBoot中,配置多数据源的方式十分便捷,

@H_403_0@下面开始上代码:

@H_403_0@在pom.xml文件中需要添加一些依赖
<!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>

<!-- MysqL 连接驱动依赖 -->
<dependency>
<groupId>MysqL</groupId>
<artifactId>MysqL-connector-java</artifactId>
<version>5.1.39</version>
</dependency>

<!-- Druid 数据连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.18</version>
</dependency>
application.properties 配置两个数据源配置
# master 数据源配置
master:
datasource:
url: jdbc:sqlserver://localhost:1433;DatabaseName=RYAccountsDB
driver-class-name: com.microsoft.sqlserver.jdbc.sqlServerDriver
username: sa
password: sa!@123
initial-size: 1
min-idle: 1
max-active: 20
test-on-borrow: true
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-While-Idle: true
test-on-return: false
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 20
filters: stat,wall,log4j,config
# second 数据源配置
second:
datasource:
url: jdbc:MysqL://localhost:33306/game_score_log?serverTimezone=GMT&useUnicode=true&characterEncoding=utf8
username: root
password: 1q2w#E4r
driver-class-name: com.MysqL.cj.jdbc.Driver
max-idle: 10
max-wait: 10000
min-idle: 5
initial-size: 5

#mybatis:
# type-aliases-package: com.cjrh.game_api.dao
# mapper-locations: classpath*:mapper/*.xml
server:
port: 7000
数据源配置
多数据源配置的时候注意,必须要有一个主数据源,即 MasterDataSourceConfig 配置

@Primary 标志这个 Bean 如果在多个同类 Bean 候选时,该 Bean 优先被考虑。「多数据源配置的时候注意,必须要有一个主数据源,用 @Primary 标志该 Bean
@MapperScan 扫描 Mapper 接口并容器管理,包路径精确到 master,为了和下面 cluster 数据源做到精确区分
@Value 获取全局配置文件 application.properties 的 kv 配置,并自动装配sqlSessionFactoryRef 表示定义了 key ,表示一个唯一 sqlSessionFactory 实例

作者:ChinaXieShuai
链接:https://www.jianshu.com/p/735852145580
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
MasterDataSourceConfig的代码:
package com.cjrh.game_api.jdbc;

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.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;


/**
* @program: game_api
* @description:
* @author: Dading
* @create: 2019-04-12 14:14
* @version: 1.0
**/
@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE,sqlSessionFactoryRef = "mastersqlSessionFactory")
public class MasterDataSourceConfig {


// 精确到 master 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.cjrh.game_api.dao.master";
static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";

@Value("${master.datasource.url}")
private String url;

@Value("${master.datasource.username}")
private String user;

@Value("${master.datasource.password}")
private String password;

@Value("${master.datasource.driver-class-name}")
private String driverClass;

@Bean(name = "masterDataSource")
@Primary
public DataSource masterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}

@Bean(name = "masterTransactionManager")
@Primary
public DataSourceTransactionManager masterTransactionManager() {
return new DataSourceTransactionManager(masterDataSource());
}

@Bean(name = "mastersqlSessionFactory")
@Primary
public sqlSessionFactory mastersqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
throws Exception {
final sqlSessionfactorybean sessionFactory = new sqlSessionfactorybean();
sessionFactory.setDataSource(masterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(MasterDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}

}
第二个数据源SecondDataSourceConfig的配置如下:

@H_403_0@package com.cjrh.game_api.jdbc;

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.beans.factory.annotation.Value;
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;

/**
* @program: game_api
* @description:
* @author: Dading
* @create: 2019-04-12 14:14
* @version: 1.0
**/
@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = SecondDataSourceConfig.PACKAGE,sqlSessionFactoryRef = "secondsqlSessionFactory")
public class SecondDataSourceConfig {

// 精确到 cluster 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.cjrh.game_api.dao.second";
static final String MAPPER_LOCATION = "classpath:mapper/second/*.xml";

@Value("${second.datasource.url}")
private String url;

@Value("${second.datasource.username}")
private String user;

@Value("${second.datasource.password}")
private String password;

@Value("${second.datasource.driver-class-name}")
private String driverClass;

@Bean(name = "secondDataSource")
public DataSource clusterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}

@Bean(name = "secondTransactionManager")
public DataSourceTransactionManager clusterTransactionManager() {
return new DataSourceTransactionManager(clusterDataSource());
}

@Bean(name = "secondsqlSessionFactory")
public sqlSessionFactory clustersqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource)
throws Exception {
final sqlSessionfactorybean sessionFactory = new sqlSessionfactorybean();
sessionFactory.setDataSource(clusterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(SecondDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
项目目录如下:

@H_403_0@

@H_403_0@?

@H_403_0@?

@H_403_0@?

@H_403_0@原文链接:

@H_403_0@https://blog.csdn.net/qq_28193409/article/details/89537216

@H_403_0@https://www.jianshu.com/p/735852145580

@H_403_0@?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读