广告
返回顶部
首页 > 资讯 > 后端开发 > Python >springboot mybatis druid配置多数据源教程
  • 770
分享到

springboot mybatis druid配置多数据源教程

2024-04-02 19:04:59 770人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1、项目代码结构2、导入基本依赖3、配置多数据源4、配置类5、启动类6、测试使用的表7、测试表对应的实体类8、持久层:dao层接口1、项目代码结构 2、导入基本依赖 记得需要导

1、项目代码结构

2、导入基本依赖

记得需要导入Mysql驱动mysql-connector-java


<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-WEB</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.2</version>
		</dependency>
		<dependency> <!-- Mysql驱动 -->
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!--druid 依赖-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.10</version>
		</dependency>
 
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

3、配置多数据源

注意Spring Boot 2.X 版本不再支持配置继承,多数据源的话每个数据源的所有配置都需要单独配置,否则配置不会生效。


spring:
  datasource:
    db1:
      url: jdbc:mysql://127.0.0.1:3306/db01?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
      username: root
      passWord:
      driver-class-name: com.mysql.cj.jdbc.Driver
 
      # 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
      initialSize: 5
      # 最小连接池数量
      minIdle: 5
      # 最大连接池数量
      maxActive: 10
      # 获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平并发效率会有所下降,如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。
      maxWait: 60000
      # Destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于 minEvictableIdleTimeMillis 则关闭物理连接。
      timeBetweenEvictionRunsMillis: 60000
      # 连接保持空闲而不被驱逐的最小时间
      minEvictableIdleTimeMillis: 300000
      # 用来检测连接是否有效的 sql 因数据库方言而异, 例如 oracle 应该写成 SELECT 1 FROM DUAL
      validationQuery: SELECT 1
      # 建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis,执行 validationQuery 检测连接是否有效。
      testWhileIdle: true
      # 申请连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
      testOnBorrow: false
      # 归还连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
      testOnReturn: false
      # 是否自动回收超时连接
      removeAbandoned: true
      # 超时时间 (以秒数为单位)
      remove-abandoned-timeout: 1800
 
    db2:
      url: jdbc:mysql://127.0.0.1:3306/db02?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
      username: root
      password:
      driver-class-name: com.mysql.cj.jdbc.Driver
 
      # 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
      initialSize: 6
      # 最小连接池数量
      minIdle: 6
      # 最大连接池数量
      maxActive: 10
      # 获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。
      maxWait: 60000
      # Destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于 minEvictableIdleTimeMillis 则关闭物理连接。
      timeBetweenEvictionRunsMillis: 60000
      # 连接保持空闲而不被驱逐的最小时间
      minEvictableIdleTimeMillis: 300000
      # 用来检测连接是否有效的 sql 因数据库方言而异, 例如 oracle 应该写成 SELECT 1 FROM DUAL
      validationQuery: SELECT 1
      # 建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis,执行 validationQuery 检测连接是否有效。
      testWhileIdle: true
      # 申请连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
      testOnBorrow: false
      # 归还连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
      testOnReturn: false
      # 是否自动回收超时连接
      removeAbandoned: true
      # 超时时间 (以秒数为单位)
      remove-abandoned-timeout: 1800
 
    # WebStatFilter 用于采集 web-jdbc 关联监控的数据。
    web-stat-filter:
      # 是否开启 WebStatFilter 默认是 true
      enabled: true
      # 需要拦截的 url
      url-pattern: 
@Configuration
@MapperScan(basePackages = "com.study.multisource.mybatis.oneDao",sqlSessionFactoryRef = "oneSqlSessionFactory")
public class DataSourceConfig1 {
    // 将这个对象放入Spring容器中
    @Bean(name = "oneDataSource")
    // 表示这个数据源是默认数据源
    @Primary
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSource getDateSource1()
    {
        return DataSourceBuilder.create().type(DruidDataSource.class).build();
    }
 
    @Bean(name = "oneSqlSessionFactory")
    // 表示这个数据源是默认数据源
    @Primary
    // @Qualifier表示查找Spring容器中名字为oneDataSource的对象
    public SqlSessionFactory oneSqlSessionFactory(@Qualifier("oneDataSource") DataSource datasource)
            throws Exception
    {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                // 设置mybatis的xml所在位置
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/one
@Configuration
@MapperScan(basePackages = "com.study.multisource.mybatis.twoDao",sqlSessionFactoryRef = "twoSqlSessionFactory")
public class DataSourceConfig2 {
    // 将这个对象放入Spring容器中
    @Bean(name = "twoDataSource")
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource getDateSource1()
    {
        return DataSourceBuilder.create().type(DruidDataSource.class).build();
    }
 
    @Bean(name = "twoSqlSessionFactory")
    // 表示这个数据源是默认数据源
    @Primary
    // @Qualifier表示查找Spring容器中名字为oneDataSource的对象
    public SqlSessionFactory oneSqlSessionFactory(@Qualifier("twoDataSource") DataSource datasource)
            throws Exception
    {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                // 设置mybatis的xml所在位置
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/two
@Data
@ToString
public class ItemOrder {
    private Integer id;
    private Integer itemId;
    private String itemName;
}

package com.study.multisource.entity; 
import lombok.Data;
import lombok.ToString;
 

@Data
@ToString
public class User {
    private Long id;
    private String name;
}

8、持久层:dao层接口

(注意:我将其放在不同目录下方便区分管理):


package com.study.multisource.mybatis.oneDao; 
import com.study.multisource.entity.User; 
import java.util.List; 
public interface UserMapper {
    List<User> getAllUser();
}

package com.study.multisource.mybatis.twoDao; 
import com.study.multisource.entity.ItemOrder; 
import java.util.List; 
public interface ItemOrderMapper {
    List<ItemOrder> getAllItemOrder();
}

dao层对应的xml配置文件:

UserMapper.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "Http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.study.multisource.mybatis.oneDao.UserMapper">
    <select id="getAllUser" resultType="com.study.multisource.entity.User">
        select *
        from `user`
    </select>
</mapper>

ItemOrderMapper.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.study.multisource.mybatis.twoDao.ItemOrderMapper">
    <resultMap id="BaseResultMap" type="com.study.multisource.entity.ItemOrder">
        <id column="id" jdbcType="BIGINT" property="id" />
        <result column="item_id" jdbcType="INTEGER" property="itemId" />
        <result column="item_name" jdbcType="VARCHAR" property="itemName" />
    </resultMap>
    <select id="getAllItemOrder" resultMap="BaseResultMap">
        select *
        from t_item_order
    </select>
</mapper>

service层:

接口:


package com.study.multisource.service; 
import com.study.multisource.entity.ItemOrder;
import com.study.multisource.entity.User; 
import java.util.List;
 

public interface TestService {
    public List<User> getAllUser();
    public List<ItemOrder> getAllItemOrder();
}

实现类:


package com.study.multisource.service.impl; 
import com.study.multisource.entity.ItemOrder;
import com.study.multisource.entity.User;
import com.study.multisource.mybatis.oneDao.UserMapper;
import com.study.multisource.mybatis.twoDao.ItemOrderMapper;
import com.study.multisource.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; 
import java.util.List;
 

@Service
public class TestServiceImpl implements TestService {
    @Autowired
    UserMapper userMapper;
    @Autowired
    ItemOrderMapper itemOrderMapper;
    @Override
    public List<User> getAllUser() {
        return userMapper.getAllUser();
    }
 
    @Override
    public List<ItemOrder> getAllItemOrder() {
        return itemOrderMapper.getAllItemOrder();
    } 
}

下面进行测试:


package com.study.multisource.multisource; 
import com.study.multisource.service.TestService;
import lombok.ToString;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
 
@SpringBootTest
class MultisourceApplicationTests { 
	@Autowired
	TestService testService;
	@Test
	void contextLoads() {
	}
	@Test
	void testS(){
		System.out.println(testService.getAllItemOrder());
		System.out.println(testService.getAllUser()); 
	} 
}

结果:

2020-05-16 08:54:17.566  INFO 12556 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
[ItemOrder(id=1, itemId=101, itemName=泡泡糖)]
--------------------------
2020-05-16 08:54:17.752  INFO 12556 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2} inited
[User(id=2, name=Lucy), User(id=4, name=Lina)]

当然也可以不用向上面分的那么细,也可以把多个数据源下面的XxxMapper.xml放在同一个目录下,同时就可以把多个数据源的配置类解析的xml路径写成同一个了


new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: springboot mybatis druid配置多数据源教程

本文链接: https://www.lsjlt.com/news/157542.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot mybatis druid配置多数据源教程
    目录1、项目代码结构2、导入基本依赖3、配置多数据源4、配置类5、启动类6、测试使用的表7、测试表对应的实体类8、持久层:dao层接口1、项目代码结构 2、导入基本依赖 记得需要导...
    99+
    2022-11-12
  • SpringBoot多数据源配置详细教程(JdbcTemplate、mybatis)
    多数据源配置 首先是配置文件 这里采用yml配置文件,其他类型配置文件同理 我配置了两个数据源,一个名字叫ds1数据源,一个名字叫ds2数据源,如果你想配置更多的...
    99+
    2022-11-11
  • springboot配置多数据源并集成Druid和mybatis的操作
    可以是mysql,oracle等多种不同数据源 项目结构 注意:只有@Primary的数据源所控制的mapper文件加注解@Mapper,否则mybatis无法切换扫描;即本文中...
    99+
    2022-11-12
  • springboot整合druid及多数据源配置
    前言 本篇主要分两部分 ①springboot整合druid的代码配置,以及druid的监控页面演示;②对实际场景中多数据源的配置使用进行讲解。 一、springboot整合druid的演示demo 可以用idea快速生成一个可运行的dem...
    99+
    2023-10-24
    spring boot java spring
  • SpringBoot使用druid配置多数据源问题
    目录一、背景二、版本介绍三、项目结构四、maven依赖 五、yaml配置文件六、数据源配置文件七、启动类配置八、druid管理页面总结一、背景 使用spring boot配...
    99+
    2023-03-11
    SpringBoot配置多数据源 druid配置多数据源 druid多数据源
  • SpringBoot怎么使用druid配置多数据源
    这篇“SpringBoot怎么使用druid配置多数据源”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎...
    99+
    2023-07-05
  • springboot中如何利用mybatis+druid配置动态数据源
    这篇“springboot中如何利用mybatis+druid配置动态数据源”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“s...
    99+
    2023-06-08
  • springboot配置druid多数据源的示例代码
    目录1、配置多数据源所需要的jar2、配置多数据源所需要的工具类3、DataSourceType 枚举类4、DruidProperties druid 配置属性5、DruidConf...
    99+
    2022-11-13
  • springboot + mybatis + druid + 多数据源的问题详解
    目录一. 简介 二. sql脚本三. 工程搭建3.1 目录结构图3.2 pom.xml文件3.3 application.yml 3.4 数据源配置类3.5 Co...
    99+
    2022-11-12
  • springboot 中怎么配置DRUID数据源
    本篇文章为大家展示了springboot 中怎么配置DRUID数据源,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.修改pom.xml<dependency>  &...
    99+
    2023-06-02
  • 详解SpringBoot和Mybatis配置多数据源
    目前业界操作数据库的框架一般是 Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑。在SpringBoot中也可以实现多数据源并配合Mybatis框架编写xml文件来执行SQL。在SpringBoot中,配...
    99+
    2023-05-31
    springboot mybatis 多数据源
  • 详解Spring Boot整合Mybatis实现 Druid多数据源配置
    一、多数据源的应用场景目前,业界流行的数据操作框架是 Mybatis,那 Druid 是什么呢?Druid 是 Java 的数据库连接池组件。Druid 能够提供强大的监控和扩展功能。比如可以监控 SQL ,在监控业务可以查询慢查询 SQL...
    99+
    2023-05-31
    spring 多数据源 spring boo
  • 教你使用springboot配置多数据源
    目录一、建库建表1.1 创建数据库db1和数据库db21.2 在数据库db1中创建表db11.3 在数据库db2中创建表db2二、创建springboot项目2.1 pom.xml导...
    99+
    2022-11-12
  • springboot多数据源配置
    简介 开发当中经常会遇到需要进行多库多表数据整合的需求,在无法拆分项目的情况下,就需要在一个项目中配置多数据源,实现多库数据的整合。本文是在springboot框架的基础上进行的多数据源配置,可参考,也欢迎指正 1、第一步:applicat...
    99+
    2023-08-24
    spring boot mybatis java database
  • Springboot集成mybatis实现多数据源配置详解流程
    新建springboot工程,引入web、mysql、mybatis依赖 <dependency> <groupId>org.sp...
    99+
    2022-11-13
  • springboot中如何利用mybatis-plus配置多数据源
    这篇文章主要介绍“springboot中如何利用mybatis-plus配置多数据源”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot中如何利用mybatis-plus配置多数据源”...
    99+
    2023-06-08
  • Springboot怎么集成mybatis实现多数据源配置
    本文小编为大家详细介绍“Springboot怎么集成mybatis实现多数据源配置”,内容详细,步骤清晰,细节处理妥当,希望这篇“Springboot怎么集成mybatis实现多数据源配置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-07-02
  • Druid数据源推荐配置
    Druid数据源推荐配置: 以下Druid数据源配置是本人整理的生产配置。 大家可以直接拷贝使用,注释非常完善。 spring: datasource: druid: url: ...
    99+
    2023-09-18
    mysql 数据库 java
  • 使用springboot+druid双数据源动态配置操作
    目录一、yml配置二、动态切换数据源配置文件1.数据源db12.数据源db2三、多数据源的mapper包最好是分开四、代码中调用总结进行动态切换,需要在类里面配置,顺便解决mybat...
    99+
    2022-11-12
  • spring+mybatis多数据源的配置
    解决方案:多套sqlSessionFactory,针对不同的数据源数据源Xml代码  <something-else-entirely>   &...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作