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应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick