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 NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及