使用HikariCP数据库连接池搭建Spring-Boot+Mybatis的项目

18 篇文章 1 订阅
6 篇文章 0 订阅

前言

Springboot让Java开发更加美好,更加简洁,更加简单。本节主要讲的是使用Hikari数据库连接池搭建Spring-Boot+Mybatis项目。

这里各位肯定会有一个问题:为什么我们要选择Hikari的数据库连接池了,而不选择C3P0/DBCP这些成熟的数据库连接池呢?因为:要说起Hikari,我们得先来说说BoneCP。传说中BoneCP在快速这个特点上做到了极致,官方数据是C3P0等的25倍左右。不相信?其实我也不怎么信。可是,有图有真相啊(图片来自BoneCP官网:http://jolbox.com/benchmarks.html):

从上图图我们可以直观的看出BoneCP的优势。而且,网上对于BoneCP是好评如潮啊。

Maven Repository网站(http://mvnrepository.com/artifact/com.jolbox/bonecp)查找有没有最新版本的时候,你会发现最新的是2013年10月份的(这么久没新版本出来了?)。于是,再去BoneCP的Githut(https://github.com/wwadge/bonecp)上看看最近有没有提交代码。却发现,BoneCP的作者对于这个项目貌似已经心灰意冷,说是要让步给HikariCP了(有图有真相):

后来HikariCP针对BoneCP做了一些列的优化

官网详细地说明了HikariCP所做的一些优化,总结如下:

  • 字节码精简:优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码;
  • 优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一;
  • 自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描;
  • 自定义集合类型(ConcurrentBag):提高并发读写的效率;
  • 其他针对BoneCP缺陷的优化,比如对于耗时超过一个CPU时间片的方法调用的研究(但没说具体怎么优化)。

很多优化的对比都是针对BoneCP的……哈哈。

(参考文章:https://github.com/brettwooldridge/HikariCP/wiki/Down-the-Rabbit-Hole

而且在Springboot2.X版本,数据库的连接池官方推荐使用HikariCP,官方的原话是这样说的:

Production database connections can also be auto-configured by using a poolingDataSource. Spring Boot uses the following algorithm for choosing a specific implementation:

  1. We preferHikariCPfor its performance and concurrency. If HikariCP is available, we always choose it.

  2. Otherwise, if the Tomcat poolingDataSourceis available, we use it.

  3. If neither HikariCP nor the Tomcat pooling datasource are available and ifCommons DBCP2is available, we use it.

意思是说:

  1. 我们更喜欢HikariCP的性能和并发性。如果有HikariCP,我们总是选择它

  2. 不然,如果Tomcat池数据源可用,我们将使用它。

  3. 如果HikariCP和Tomcat池数据源都不可用,如果Commons DBCP2可用,我们将使用它。

那么如何使用HikariCP呢?

如果你的springboot版本是2.X,当你使用spring-boot-starter-jdbc或者spring-boot-starter-data-jpa依赖,springboot就会自动引入HikariCP的依赖了。

使用指定的数据库连接池

如果你需要使用指定的数据库连接池,那么你需要在application.properties中配置:spring.datasource.type

好了关于为什么用HikariCP就说这么多吧,需要了解更多的小伙伴可以具体的上网了解了解。

环境

下面就是搭建Spring-boot+mybatis的环境:

  • JDK: 1.8   Spring-Boot要求至少是jdk6,建议用8以上

  • Maven: 3.3.9  

  • SpringBoot: 2.0.3.RELEASE

  • 开发工具:Intellij IDEA 2017  或者  eclipse  都可以  这里以IDEA为             

首先我们来导入依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <!--排除默认的tomcat-jdbc-->
                <exclusion>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jdbc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <!-- mybatis一定要使用starter,不然无法自动配置和注入 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>    

基本上以上的依赖就足够了,前面介绍过,只需要导入spring-boot-starter-jdbc依赖springboot就默认使用Hikari作为数据库连接池了。

application.yml的配置

server.port=8080

#### 数据库连接池属性
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mytest?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=root
#自动提交
spring.datasource.default-auto-commit=true
#指定updates是否自动提交
spring.datasource.auto-commit=true
spring.datasource.maximum-pool-size=100
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
spring.datasource.validation-query=SELECT 1
spring.datasource.test-on-borrow=false
spring.datasource.test-while-idle=true
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.time-between-eviction-runs-millis=18800
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000

# mybatis对应的映射文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
# mybatis对应的实体类
mybatis.type-aliases-package=com.test.model

启动类

package com.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootMybatisHikaricpApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootMybatisHikaricpApplication.class, args);
    }
}

 

好了其他的关于Controller  service  dao  mapper  就在这里不多写了,这些的写法和传统的ssm写法一致

给大家科普两个知识点:

  • @RequestParam 用于将请求参数区数据映射到功能处理方法的参数上,value:参数名字,即入参的请求参数名字,如fileldName表示请求的参数区中的名字为fileldName的参数的值将传入,required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;

  • @Controller和@RestController的区别?

测试

如果项目成功启动了,那么可以开始测试了

推荐使用一个强大的http请求工具:Postman,这也是测试人员常用的接口测试工具

需要Postman工具的小伙伴们可以扫描下面的二维码点击关注找小编索取,除了Postman,其他方面的软件也可以关注索取

摆渡浮沉沧海,欢迎您的加入。

本文章采用markdown编写,一个很好的文档编辑器,需要的亦可以扫描关注找小编索取。

 个人博客:https://blog.csdn.net/qq_37840993

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Calvin_it

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值