【Java架构必看】Mybatis用的什么连接池?

简介: Mybatis内置Pooled、Unpooled和JNDI三种数据源,支持连接池的Pooled性能有限,存在空闲资源占用、调优困难和连接泄漏等问题。因此推荐使用更成熟的第三方数据源如Hikari、Druid等,以提升系统稳定性和性能。

Mybatis内置了三种数据源,分别是Pooled、Unpooled和JNDI,其中Pooled数据源是具有连接池的。同时Mybatist也可以使用三方数据源,如Druid、Hikari、C3P0等等。

Mybatis数据源的类图如下所示:

image.gif


可以看到,在Mybatis中,会通过工厂模式来获得对应的数据源,那么Mybatis是在执行的哪一步获取的呢?

答案是在执行SQL之前,Mybatis会获取数据库连接Connection,而此时获得的Connection则是应用的启动的时候,已经通过配置项中的文件加载到内存中了:

<dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSource">
  <property name="driver" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  <property name="username" value="root"/>
  <property name="password" value="123456"/>
</dataSource>

一般情况下,我们不会使用Mybatis默认的PooledDataSource,而是会用Hikari,如果要增加Sql监控功能的话,也可以使用Druid,这是因为自带的数据库连接池有三个缺点:

  1. 空闲连接占用资源:连接池维护一定数量的空闲连接,这些连接会占用系统的资源,如果连接池设置过大,那么会浪费系统资源,如果设置过小,则会导致系统并发请求时连接不够用,影响系统性能。
  2. 连接池大小调优困难:连接池的大小设置需要根据系统的并发请求数、数据库的性能和系统的硬件配置等因素综合考虑,而这些因素都是难以预测和调整的。
  3. 连接泄漏:如果应用程序没有正确关闭连接,那么连接池中的连接就会泄漏,导致连接池中的连接数量不断增加,最终导致系统崩溃。

总的来说,专业的事情交给专业的组件来做,Mybatis功能的核心是ORM映射和缓存,数据库连接池这种东西,市场上已经有比它做的更好的,我们直接用那些更好的就行了。

目录
相关文章
|
2月前
|
SQL 缓存 Java
【Java架构必看】Mybatis的工作原理
MyBatis执行分启动与运行两阶段:启动时加载配置,运行时代理执行SQL。通过JDK动态代理生成Mapper接口,结合缓存机制与Executor执行SQL,最终由TypeHandler完成结果映射。
141 4
|
2月前
|
移动开发 数据可视化 安全
数字孪生云渲染终极指南(一):什么是实时云渲染?
将三维可视化程序上云可以有效解决上述问题。通常可采用WebGL、HTML5、threejs、虚拟化、云桌面,以及云渲染等各类技术方案,实现客户端与服务端的分离,从一定程度上降低客户端硬件配置要求,提高程序兼容性。实时云渲染技术是目前最先进的云化技术之一,也是数字孪生三维可视化场景商业模式破局的关键。
370 155
数字孪生云渲染终极指南(一):什么是实时云渲染?
|
2月前
|
消息中间件 架构师 Java
【Java架构师】各个微服务之间有哪些调用方式?
微服务拆分后需跨进程通信,常见方式包括HTTP调用(如RESTful、OpenFeign、@HttpExchange)、RPC框架(如Dubbo、gRPC、Thrift)、消息队列(如Kafka、RabbitMQ)及服务网格(如Istio)。不同场景下可依据性能、异步、跨语言等需求选择合适方案。
571 0
|
2月前
|
架构师 IDE Java
【Java架构师】Maven中lombok那点事
SpringBoot项目中Lombok需在maven-compiler-plugin中配置`annotationProcessorPaths`,确保编译期生成getter/setter等方法;而`excludes`则在打包时排除Lombok依赖,减小体积,因运行时已无需该库。
241 0
|
2月前
|
自然语言处理 搜索推荐 机器人
阿里云中国智能客服市场份额蝉联第一
国际数据公司IDC发布《中国智能客服市场份额,2024》,阿里云 2024 年在中国智能客服市场份额占比 11.4%,持续位居第一。累计服务互联网、零售、金融、保险、医疗、教育、政务、交通物流、汽车等行业超 5000 家企业客户。
|
人工智能 大数据 安全
拔俗AI临床大数据科研分析平台:用智能技术加速医学研究新突破
AI临床大数据科研平台基于云原生架构,融合医疗NLP、联邦学习与智能分析技术,破解非结构化数据处理难、多源数据融合难、统计周期长等痛点,实现数据治理、智能分析与安全协作全链路升级,赋能医学科研高效、安全、智能化发展。
|
存储 设计模式 Java
探索 JavaBean(实体类)的奇妙世界
JavaBean(实体类)是Java开发中的重要概念,遵循特定设计模式的普通Java类。
799 13
|
IDE Java 开发工具
如何进行《我的世界》基于Spigot的插件开发
《我的世界》(Minecraft)是一款沙盒游戏,允许玩家在一个由方块组成的三维世界中进行探索、建造和冒险。通过使用Spigot服务器,你可以为《我的世界》开发自定义插件,扩展游戏功能,增加新的玩法和互动元素。本文将介绍如何进行《我的世界》基于Spigot的插件开发,帮助你从零开始创建自己的插件。
962 0
|
Java 数据库连接 数据库
sqlLite 如何使用数据库连接池
这篇文章介绍了如何在SQLite数据库操作中使用HikariCP连接池以减少频繁建立和释放数据库连接的资源消耗,包括在Maven项目中添加依赖、配置HikariDataSource对象以及实现数据库连接池的具体代码示例。
|
人工智能 API Python
Openai python调用gpt测试代码
这篇文章提供了使用OpenAI的Python库调用GPT-4模型进行聊天的测试代码示例,包括如何设置API密钥、发送消息并接收AI回复。