Spring与HikariCP的结合使用

2024-02-10 11:38

本文主要是介绍Spring与HikariCP的结合使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       HikariCP是当下比较火的连接池,号称性能最好,可以PK当前任意数据库连接池。那么数据库连接池到底是什么?它的作用又是什么呢?

       要说数据库连接池,就得从用户请求链接开始,如下图所示,用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。并且很容易造成数据库服务器内存溢出、宕机。

       为了解决上述问题,使用数据库连接池技术来优化程序性能。数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。由于连接池中存储了建立数据库连接的信息,因此也有数据源的称呼。使用数据库连接池后的请求过程如下图所示,数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。后文将会详细讨论这两个参数如何更好的设置。

       通过上面的连接池技术,可以大大的优化程序性能。而不同的连接池的并发压力下的稳定性等各有不同。前几年比较热门的有boneCP、dbcp、c3p0等。其中boneCP前几年一直火热,不过现在开始慢慢步入夕阳。就连boneCP项目的作者也要弃他而去,并推荐了未来的主角HikariCP。HikariCP以其“快速、简单、可靠”的特点,受到程序员越来越多的青睐。下面我们来看看它是如何用的。
       在spring框架中,经常将连接池的设置参数独立成一个.properties文件,它可以根据客户需求,自定义一些相关的参数。而参数的读取一般写到applicationContext.xml的文件中(后文将会详细介绍该文件的作用)。然后通过org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类将.properties(key/value形式)文件中设定的值在xml中替换为占位该键($key)的值,这样的设计可以灵活些。

      上图为.properties文件,用来配置连接池的一些参数。其中jdbc.driver是一个数据库驱动类,根据你的数据库来决定。MySQL的jdbc驱动一般有两种:一种是org.gjt.mm.mysql.Driver,这种是git组织提供的,现在基本很少用;另一种就是图片中的com.mysql.jdbc.Driver,这是mysql官方提供的驱动。
        jdbc.url是数据库地址,它的格式如下:jdbc:mysql://【host:port】/【database】【?参数名1=参数值1&参数名2=参数值2】...,下图是几个比较重要的参数:

        

       jdbc.minCon和jdbc.maxCon的设置需要考虑以下因素:最小连接数如果设置过大,而应用程序对数据库连接的使用量不大时,将会有大量的数据库连接资源被浪费。最大连接数如果设置过小,而应用程序对数据库连接的使用量过大时,将会有请求被加入到等待队列中,影响以后的数据库操作。

        连接池的数量大致可以通过以下公式来计算:pool size=Tn*(Cm-1)+1,其中Tn为最大线程数量,Cm为单个线程上最大并发量。

        配置好.properties文件后,接着了解applicationContext.xml文件的设置。说到该文件就不得不提spring的思想依赖注入。在开发中,有时某个类需要依赖其他类的方法,通常的做法是new一个依赖类,在调用类实例的方法。这种方法存在的问题是new出来的实例不好管理。因此为了解决这个问题,spring提出了一种依赖注入的思想。即依赖类不需要程序员来实例化,而是通过spring容器来帮我们new指定实例并且将该实例注入到需要的对象类中。spring提供了两种注入方式:构造函数注入和方法注入。下图所示为setter方法注入。整个applicationContext.xml(配置文件)的作用是把类放入到spring容器中,在<bean></bean>这个里面就相当于是整个spring的bean的大包,需要将什么类纳入到spring容器中,就在这个里面进行说明。

第一行代码,定义一个id是propertyConfigurer的bean。每个bean的id属性是该bean的唯一标识,程序通过id属性访问bean,bean与bean的依赖关系也通过id属性完成。class指定该bean实例的实现类。在spring中,使用PropertyPlaceholderConfigurer可以在xml配置文件中加入外部属性文件,当然也可以指定外部文件的编码,也可以引入多个属性文件。上图中的classpath是引用src目录下的文件写法,当存在多个properties文件时,配置就需要使用locations了。

       假设注入的类的属性包括各自的setter和getter方法,还有一个包含这些属性的构造方法,如果用spring来管理这个对象,那么有两种方式为该对象设置属性:设值注入和构造注入。两种方式各有优点,设值注入需要该bean包含这些属性的setter方法,与传统的javabean的写法更相似,程序开发人员也更容易理解,接受。而构造注入需要该bean包含带有这些属性的构造器,构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入。上图为设值注入。Destroy-method=“shutdown”的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用。
--------------------- 
作者:benben_2015 
来源:CSDN 
原文:https://blog.csdn.net/benben_2015/article/details/78660501 
版权声明:本文为博主原创文章,转载请附上博文链接!

这篇关于Spring与HikariCP的结合使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697010

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再