spring boot2 (26)-hikari、多个数据源/mybatis/事务

springBoot + Hikari 配置多数据源连接数据库 阅读详情

我在12篇讲过,spring boo1.x版本中,默认使用tomcat数据源,第二候选是hikari,虽然其性能更好,但是当时才刚刚出来需要时间的考验。而在spring boot2.x版本中,hikari终于荣升为默认数据源,已被包含在spring boot的jdbc依赖组件中。

参数配置

在properties中配置以下参数,前三个是通用配置,注意第四个参数maximumPoolSize有一个hikari前缀,代表hikari连接池的参数配置。更多参数及其详细说明可参考https://github.com/brettwooldridge/HikariCP

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.hikari.maximumPoolSize=100

多个数据源

上面的参数是spring boot用于自动配置唯一数据源。有时候我们可能需要多个数据源,比如要让mybatis同时支持mysql和oracle,则需要手动配置数据源。

  • mysql参数:以下是我自定义的参数名,注意第一个参数,hikari只有jdbc-url而没有url。在spring boot自动配置时会将通用的url转换为hikari的jdbc-url,而手动配置时是无法被自动识别及转换的。
mysql.jdbc-url=jdbc:mysql://localhost:3306/test
mysql.username=root
mysql.password=123456
mysql.maximum-pool-size=30
  • oracle参数:配置同上。
oracle.jdbc-url=xxxxxxxxxxxxxxxxxxxxx
oracle.username=root
oracle.password=123456
oracle.maximum-pool-size=30
  • mysql数据源:@Primary代表它是系统中默认的主数据源,其bean的id就是方法名mysqlDataSource。
	@Bean
	//默认数据源
	@Primary
	//将properties中以mysql为前缀的参数值,写入方法返回的对象中
	@ConfigurationProperties(prefix="mysql")
	public DataSource mysqDataSource() {
		//通过DataSourceBuilder构建数据源
		return DataSourceBuilder.create().type(HikariDataSource.class).build();
	}
  • oracle数据源:spring的@Autowired是按类型注入bean,由于上面已经配置了一个DataSource类型,现在要配置第二个同类型的bean,此时按类型注入时会引起混乱。这里使用@Qualifier定义一个名字,以区别于上面的主数据源。
	@Bean
	//副数据库需要配置@Qualifier
	@Qualifier("oracle")
	@ConfigurationProperties(prefix="oracle")
	public DataSource oracleDataSource() {
		return DataSourceBuilder.create().type(HikariDataSource.class).build();
	}

多个mybatis配置

  • mysql配置:手动配置一个SqlSessionFactory,同时使用@Primary作为默认主SqlSessionFactory,通过@MapperScan指定dao目录,参考第8篇,这个目录的dao都会使用默认的主SqlSessionFactory。
@SpringBootConfiguration
@MapperScan(basePackages = "hello.dao.mysql")
public class MysqlConfig {
	
	@Bean
    @Primary
    public SqlSessionFactory mysqlSessionFactory(DataSource mysqlDataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(mysqlDataSource);
        return bean.getObject();
  • oracle配置:注意看两者的区别,参数多了@Qualifier("oracle")表示这个SqlSessionFactory使用的是oracle数据源,而上面没有指定@Qualifier则会使用默认的msql主数据源。这里同时指定了sqlSessionFactoryRef,其值oracleSessionFactory为SqlSessionFactory方法的方法名。同理,上面mysql也不需要配置这个
@SpringBootConfiguration
@MapperScan(basePackages = "hello.dao.oracle", sqlSessionFactoryRef = "oracleSessionFactory")
public class OracleConfig {
	
    @Bean
    public SqlSessionFactory oracleSessionFactory(@Qualifier("oracle")DataSource oracleDataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(oracleDataSource);
        return bean.getObject();
    }

多个事务

上面是mysql主事务管理,下面是oracle,配置原理和上面SqlSessionFactory一样,不多说了。
	@Bean
	@Primary
	public PlatformTransactionManager mysqlTransactionManager(DataSource mysqlDataSource) {
		return new DataSourceTransactionManager(mysqlDataSource);
	}
	@Bean
	public PlatformTransactionManager oracleTransactionManager(@Qualifier("oracle")DataSource oracleDataSource) {
		return new DataSourceTransactionManager(oracleDataSource);
	}
第六篇结尾讲过事务用法,如下默认会使用mysql主事务
@Transactional
如下指定使用oracle事务
@Transactional(transactionManager="oracleTransactionManager")
配置hikari数据库连接池时多数据源不生效 上述配置:hikari 与dynamic 对齐,处于同级。都位于spring.datasource下。如果是单数据源,这么配置生效,没问题,but 多数据源不生效。加载上述配置,此时发现默认配置生效。 阅读详情

相关推荐

Springcloud+Mybatis使用多数据源的四种方式

Springcloud+Mybatis使用多数据源的四种方式 前段时间在做会员中心和中间件系统开发时,多次碰到多数据源配置问题,主要用到分包方式、参数化切换、注解+AOP、动态添加 这四种方式。这里做一下总结,分享下使用心得以及踩过的坑。 分包方式 数据源配置文件 在yml中,配置两个数据源,id分别为master和s1。 spring: datasource: master: jdbcUrl: jdbc:mysql://192.168.xxx.xxx:xxxx/db1?

Java6888的博客 1645

SpringBoot整合(五)HikariCP、Druid数据库连接池—多数据源配置

SpringBoot整合(五)HikariCP、Druid数据库连接池—多数据源配置

qq_44665283的博客 1万+

MySQL跨库事务实战:基于本地消息表的最终一致性方案

跨库事务是微服务架构中保障数据一致性的核心挑战,其本质在于数据库原生不支持跨实例的原子性操作。本文围绕MySQL分布式事务场景,深入解析如何通过本地消息表、TCC轻量变体与异步补偿机制,将不可控的强一致性诉求,转化为可监控、可回滚、可追溯的状态机流程。方案摒弃XA协议与重量级中间件,依托Spring Boot应用层编排,结合Redis幂等校验与定时任务驱动,实现5分钟内最终一致性。适用于电商下单、支付对账等高可靠业务,尤其适合已落地分库分表但缺乏分布式事务框架支撑的中大型系统。

SailingAptech的专栏 443

Spring Boot 2.7.5 HikariCP 连接池多数据源配置

Springboot 2.7.5多数据源配置

换条路吧,编程没意思的~ 1万+

Unity2020版本使用Kinect的修复(附粒子人像互动demo)

Unity2020版本使用Kinect的修复附粒子人像互动demo工程版本及说明工程demo说明演示效果工程地址 工程版本及说明 Unity2020.1.3f1c1 因为想用(学习)jpのK神做的一些粒子效果,由于他使用的是2020的新技术故需要把Kinect插件导入进2020版本,但2020版本已经不支持GUIText及GUITex这些操作了 因此需要修复成UGUI。 工程demo说明 打开工程后直接进入这个场景即可,如果只是想看粒子效果则需要把KinectController关掉,然后开启Beta O

qq_42685027的博客 5371

gps matlab 书,《GPS基本原理及其Matlab仿真》杨俊.pdf

本书讲述了全球定位系统(GPS)的基本原理和概念,具体包括:GPS测量原理、GPS的结构和发展历史;GPS伪距定位和载波相位定位的原理;GPS中使用的坐标系和时间系统;C/A码的实现原理及载波调制过程;GPS信号捕获和跟踪原理及实现;便携式GPS系统的设计与实现及常用芯片资料等。此外,本书还讲了利用Matlab仿真GPS中涉及到的各种算法和原理,并且给出了所有仿真源程序和仿真框图。利用Matlab...

weixin_33603105的博客 1176

Spring Boot 3.2.5 + MyBatis-Plus 3.5.5 + Spring AI 1.0.0 生产级版本兼容方案

在Java后端集成AI能力时,Spring Boot、MyBatis-Plus与Spring AI三者因演进节奏差异易引发版本耦合冲突,典型表现为Bean注册失败、自动填充失效、事务不一致及死锁等问题。其根源在于Spring Boot 3.x的AOT预编译、虚拟线程与Jakarta EE迁移,叠加MyBatis-Plus对JDBC新API的适配延迟,以及Spring AI早期版本对Spring Boot 3生命周期机制的兼容不足。该组合的技术价值在于保障AI调用链路可观测性、数据库操作原子性与事务强一致性,

weixin_30540691的博客 431

手机相机基础技术解析:从硬件到算法的全面指南

手机相机的成像过程可简化为的链路,其核心硬件包括 镜头、CMOS传感器、ISP(图像信号处理器) 以及配套的软件算法。

weixin_44239603的博客 2452

Spring Boot与MyBatis Plus构建问卷系统SurveyKing

Spring Boot作为Java生态中的主流框架,通过自动化配置和模块化设计显著提升了开发效率。结合MyBatis Plus这一增强型ORM工具,开发者能够以更少的代码实现复杂的数据持久层操作,包括动态查询构建和乐观锁控制。JWT认证机制则为前后端分离架构提供了安全且高效的解决方案。这些技术的组合特别适合构建像SurveyKing这样的问卷系统,它不仅能快速实现问卷创建、发布和数据分析等核心功能,还能通过JSON Schema灵活支持多种题型。对于需要快速搭建数据收集平台的企业或教育机构,这种技术栈提供了

weixin_34183910的博客 319

IEEE802.11bf: WLAN Sensing Standard

下表为IEEE802.11bf 定义的使用情境 (Use Cases)

qinsd19的博客 1062

瑞芯微RK3506开发板DSM音频开发避坑指南:从硬件改接到内核配置全流程

本文详细解析了在瑞芯微RK3506开发板上进行DSM音频开发的完整流程与关键避坑点。内容涵盖从硬件改造(如电阻焊接)、内核驱动配置(DTS参数、补丁应用)到系统调试与波形分析的全过程,旨在帮助嵌入式开发者高效实现高信噪比、低成本的音频方案,避免常见错误。

weixin_29164091的博客 411

Spring Boot与MyBatis-Plus高效CRUD开发实战

ORM框架是现代Java开发中处理数据库操作的核心组件,通过对象关系映射将数据库表转换为Java对象。MyBatis-Plus作为MyBatis的增强工具,基于动态代理和注解处理实现智能SQL生成,显著减少了传统CRUD操作的样板代码。在Spring Boot项目中集成MyBatis-Plus后,开发者可以快速实现单表操作的300%效率提升,特别适合用户管理系统等需要高频CRUD的业务场景。通过自动填充、逻辑删除等企业级特性,配合HikariCP连接池优化,能够构建出高性能的数据访问层。

weixin_30258901的博客 346

BEVFusion(mit)最强环境安装,部署复现

BEVFusion作为一项经典的工作,值得深入探索。然而由于配置环境比较麻烦,耽误了一些时间。经过几次成功配置之后,有了一些总结,在这里记录下来,供大家参考避坑,也方便自己下次查阅。

qq_45783225的博客 1万+

SpringBoot多数据源切换 多数据源事务解决方案 二

如果只是重写了AbstractRoutingDataSource方法,那么在事务下数据源是切换不了的,还需要重写事务方法。多数据源切换下保证事务解决方案。

Lyndon的专栏 555

uniapp - 解决在线预览PDF文件空白打不开的问题,无论是后端下载二进制文件流pdf还是本地插件或JS预览查看打开白屏不显示,详细排查解决(适用于移动端H5网页、安卓/苹果app、微信小程序)

uniapp App端 实现pdf文件预览打开白屏解决,uniapp 在线预览pdf打开一片空白,跨域白屏,uni-app中使用WebView预览PDF文件打开空白,微信小程序(uniapp)预览PDF空白怎么办,下载PDF文件流后打开空白或无法打开的问题,Uniapp H5网页下载二进制pdf文件页面空白以及解决文件损坏打不开的情况,Uniapp app在线预览pdf文件流,PDF加载出来怎么办,服务器后端返回PDF文件流后前端进行下载但打开后一片白屏,解决pdf文件流,预览全是空白页,pdf文件流,下载

🏆 前端领域优质创作者 1万+

肖特基二极管选型参数,结构原理,工艺与注意问题总结

肖特基二极管(Schottky Diode)是一种特殊的二极管,也被称为肖特基势垒二极管。它是利用金属与半导体接触形成的金属-半导体结原理制成的。与传统的PN结二极管相比,肖特基二极管具有更低的正向压降、更高的开关速度、更高的反向恢复时间以及更好的温度稳定性等特点。本文对肖特基二极管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 815

JAVA 数据库连接池系列 —— Spring Boot 2.x 整合 HikariCP 多数据源

文章目录一、场景描述二、组件介绍三、组件引入四、测试案例 一、场景描述   本文是单数据源配置的衍生和续篇。关于 MySQL 数据库单数据源的配置,请参考前面 《JAVA 数据库连接池系列 —— Spring Boot 2.x 整合 HikariCP 多数据源》 这篇文章。   在项目的开发过程中,特别是项目未进行微服务划分的情况下。很有可能出现一个业务请求,需要多个数据库的检索结果进行多次加工后,才能满足本次业务检索需求的场景。但是整个请求都处于同一个项目中。这样,单项目多、数据源的需求就慢慢的被团队成员

Rambo's Blog 1408

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MySQL从入门到精通:安装、SQL、索引、事务与Spring Boot集成全攻略

关系型数据库是数据持久化存储与管理的核心技术,其通过SQL语言实现对结构化数据的高效操作。理解其核心原理,如索引机制如何加速查询、事务ACID特性如何保障数据一致性,是构建稳定可靠应用系统的基石。这些技术广泛应用于Web后端、企业信息系统等需要高并发事务处理的OLTP场景。本文聚焦MySQL这一最流行的开源关系型数据库,提供从零开始的完整学习路径,涵盖环境部署、SQL语法、性能优化等关键实践,并详解如何与Spring Boot框架集成,助力开发者快速掌握数据库开发与运维的核心技能。

weixin_30527323的博客 414

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

springboot添加多数据源连接池并配置Mybatis

springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018 星期六,那是个晴天,天湛蓝湛蓝的非常干净,仿佛飘过一粒尘埃也能看得清清楚楚,然后就发生了些事情。。。很伤心很难过,至今也没能抹去,欸,我是怎样一步步把自己变成这个样子呢。 ...

weixin_30724853的博客 116

【SpringBoot框架篇】30.使用sharding-jdbc实现读写分离和分库分表

ShardingSphere-JDBC 提供了 4 种配置方式,用于不同的使用场景。 通过配置,应用开发者可以灵活的使用数据分片、读写分离、数据加密、影子库等功能,并且能够叠加使用。

皓亮君的博客 2380

springboot整合数据层

2.使用yaml配置 数据库连接的参数不再放在xml配置文件里了,而是放在yaml配置文件里在默认情况下, 数据库连接可以使用DataSource池进行自动配置(1)如果Hikari可用, Springboot将使用它。(2)如果Commons DBCP2可用, 我们将使用它。 二、配置druid数据源 1.引入druid的依赖 使用druid要引入druid的依赖 2.修改连接池类型 yaml配置文件里只是指定了用户名、密码、url,要把它配置给一个datasource对象,创建一个配置类Configu

2201_76081438的博客 1179

每周小记——SpringBoot&Mybatis-Plus

本文概述SpringBoot实践及整合MyBatis-Plus与Swagger,涵盖基础配置(环境搭建、YAML、多环境部署、热部署),框架整合(Swagger3自动API文档、MyBatis-Plus简化CRUD/逻辑删除/乐观锁/代码生成器/多数据源),高级特性(YAML封装、函数式接口、ActiveRecord模式),实用技巧(自定义Banner、分页/自定义SQL、枚举处理、Service封装),以代码示例驱动企业级开发。

weixin_57655687的博客 2395

Java Web企业级进销存系统开发实战

企业级应用开发中,前后端分离架构已成为主流技术方案。基于SpringBoot和Vue3的技术组合,能够有效提升开发效率和系统性能。SpringBoot作为轻量级Java框架,通过自动配置简化了企业应用的搭建过程;Vue3的组合式API则大幅提升了前端代码的可维护性。在数据库层面,MySQL 8.0的窗口函数特性可以优化复杂查询,而MyBatis-Plus的Lambda表达式则简化了数据访问层代码。这些技术在供应链管理系统中有广泛应用,特别是进销存场景下的采购管理、库存预警等核心功能。本文以轴承行业为例,详细

cmff98425的博客 537

JavaWeb知识点

1.Maven中的仓库用来存储什么的?Maven的仓库是用来存储和管理jar包的2.Maven中有哪几类仓库?查找依赖(jar)的顺序是什么样的?本地仓库(1)远程仓库(2)中央仓库(3)

ql200106的博客 307

JP4-1-1-MyLesson项目简介

MyLesson项目简介,包括项目介绍,权限介绍,环境介绍,技术栈介绍,环境初始化操作,数据库表的创建等。

周航宇的博客 2972

DataSourceBuilder.create().build()

Spring Boot also provides a utility builder class DataSourceBuilder that can be used to create one of the standard data sources (if it is on the classpath). The builder can detect the one to use based...

weixin_34100227的博客 7078
上一篇: spring boot2 (25)-RestTemplate客户端
下一篇: spring boot2 (27)-yaml配置
free_java
博客等级 码龄10年 664粉丝 131原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值