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

相关文章

Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

《Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)》:本文主要介绍Java导入、导出excel的相关资料,讲解了使用Java和ApachePOI库将数据导出为Excel文件,包括... 目录前言一、引入Apache POI依赖二、用法&步骤2.1 创建Excel的元素2.3 样式和字体2.

Java实现将Markdown转换为纯文本

《Java实现将Markdown转换为纯文本》这篇文章主要为大家详细介绍了两种在Java中实现Markdown转纯文本的主流方法,文中的示例代码讲解详细,大家可以根据需求选择适合的方案... 目录方法一:使用正则表达式(轻量级方案)方法二:使用 Flexmark-Java 库(专业方案)1. 添加依赖(Ma

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis

使用国内镜像源优化pip install下载的方法步骤

《使用国内镜像源优化pipinstall下载的方法步骤》在Python开发中,pip是一个不可或缺的工具,用于安装和管理Python包,然而,由于默认的PyPI服务器位于国外,国内用户在安装依赖时可... 目录引言1. 为什么需要国内镜像源?2. 常用的国内镜像源3. 临时使用国内镜像源4. 永久配置国内镜

Spring Boot拦截器Interceptor与过滤器Filter详细教程(示例详解)

《SpringBoot拦截器Interceptor与过滤器Filter详细教程(示例详解)》本文详细介绍了SpringBoot中的拦截器(Interceptor)和过滤器(Filter),包括它们的... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程1. 概述1

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题

《SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题》dynamic-datasource-spring-boot-starter是一... 目录概要整体架构构想操作步骤创建数据源切换数据源后续问题小结概要自己闲暇时间想实现一个多租户平台,

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

详解如何使用Python提取视频文件中的音频

《详解如何使用Python提取视频文件中的音频》在多媒体处理中,有时我们需要从视频文件中提取音频,本文为大家整理了几种使用Python编程语言提取视频文件中的音频的方法,大家可以根据需要进行选择... 目录引言代码部分方法扩展引言在多媒体处理中,有时我们需要从视频文件中提取音频,以便进一步处理或分析。本文

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自