MyBatis 外接 HikariCP 连接池 (无Spring)

原创 2018年04月15日 20:37:29

尝试MyBatis连接HikariCP连接池, 资料基本都来自于 MyBatis官网手册以及 HikariCP Github页面的readme.md教学文件

笔者用的是MySql数据库, 首先根据hikariCP的要求, 选择适合的插入依赖
Java 8/9 maven artifact:

    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>2.7.8</version>
    </dependency>

Java 7 maven artifact (*maintenance mode*):

    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP-java7</artifactId>
        <version>2.4.13</version>
    </dependency>

Java 6 maven artifact (*maintenance mode*):

    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP-java6</artifactId>
        <version>2.3.13</version>
    </dependency>

然后我们查看官方文档, 要求我们写一个继承org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory 的类

public class HikariCPDataSourceFactory extends UnpooledDataSourceFactory {
    public HikariCPDataSourceFactory() {
        this.dataSource = new HikariDataSource();
    }
}

HikariCP 的文档要求我们配置properties, 这个我们不需要担心, 在MyBatis中, 我们只要和不引入外接数据源一样, 配置MyBatis的数据库连接文件就可以了, 唯一变化的, 只是配置文件中的属性, 是我们这个外接数据源的属性即可. 新建hikari.properties(名称不固定)在rescourses文件夹下, 配置

jdbcUrl=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
username=root
password=admin

这里只配置了3个足够的参数, 多余的参数请查阅HikariCP 在 Github上的文档. 这3个参数和我们正常配置的参数还不太一样, 也和正常HikariCP的配置不同, 我们下面分条讲述:

  1. 没有配置driverClassName
  2. HikariCP已经引入了dataSourceClassName作为 jdbcUrl的替代, 但是我们仍然配置了jdbcUrl

问题1: 官方文档如下
driverClassName:
HikariCP will attempt to resolve a driver through the DriverManager based solely on the jdbcUrl,
but for some older drivers the driverClassName must also be specified. Omit this property unless
you get an obvious error message indicating that the driver was not found.
大意就是说, HikariCP会根据jdbcUrl这个属性来帮我们找到 driver, 但是一些旧的driver并不能被找到, 报错的时候我们再来手动添加这个属性.

问题2: 官方文档如下
dataSourceClassName:
We recommended using dataSourceClassName instead of jdbcUrl, but either is acceptable. We’ll say that again, either is acceptable.
Spring Boot auto-configuration users, you need to use jdbcUrl-based configuration.
The MySQL DataSource is known to be broken with respect to network timeout support. Use jdbcUrl configuration instead.
dataSourceClassName 这个属性可以提供JDBC驱动, 并且是官方推荐我们使用这个属性 替代使用 jdbcUrl. 但是 MySQL 数据库在网络超时的支持上有崩溃的可能, 所以我们使用MySQL数据库时还是使用jdbcUrl, 另外, spring 自定义扩展 也要使用jdbcUrl这一个属性

关于数据库的dataSourceClassName, 各个数据库的值也是固定的, 也请翻阅hikariCP的官方文档.

接下来我们配置MyBatis的SqlMapConfig.xml, 加入

<properties resource="hikari.properties"></properties>

然后配置dataSource

<dataSource type="com.itheima.utils.HikariCPDataSourceFactory" >
        <property name="jdbcUrl" value="${jdbcUrl}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
</dataSource>

这里的name以及${}需要和我们在hikari.properties中设置的属性一致, 配置完成我们利用jUnit和Log日志进行测试,
项目构建以及数据库user表如下:
项目构建数据库

<!-- UserMapper.xml 配置 -->
<mapper namespace="com.itheima.builder.UserMapper">
  <select id="getUserById" resultType="user"  parameterType="int">
    select * from user where id = #{id}
  </select>
</mapper>
public class Demo01 {
    private SqlSession sqlSession;

    @Before
    public void init() throws IOException {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(Resources.getResourceAsStream("SqlMapConfig.xml"));
        sqlSession = factory.openSession();
    }

    @Test
    public void selectUserById2() throws IOException {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserById(1);
        System.out.println(user);
    }

    @After
    public void close() {
        sqlSession.close();
    }
}

输出(一部分):
输出结果
已经查找到了我们存放的数据, 并且还看到了 dataSource的属性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/elyacc/article/details/79952851

Spring Cloud (15) | Spring Boot、HikariCP、Mybatis和MySQL 配置HikariCP数据库连接池

HiKariCP数据库连接池号称目前是最快的, HikariCP VS druid VS c3p0 VS dbcp VS jdbc 数据库连接池性能比对 性能方面 hikariCP>druid>tom...
  • superdangbo
  • superdangbo
  • 2017-12-07 10:37:36
  • 1118

Spring、HikariCP、Mybatis、Oracle 配置HikariCP数据库连接池

spring配置文件里,配置HikariCP数据库连接池
  • superdangbo
  • superdangbo
  • 2017-12-07 11:01:12
  • 639

spring-boot配置MySQL数据库连接、Hikari连接池、和Mybatis的简单方法

此方法为极简配置,支持MySQL数据库多库连接、支持Hikari连接池、支持MyBatis(包括Dao类和xml文件位置的配置)。...
  • ClementAD
  • ClementAD
  • 2016-10-27 12:07:03
  • 20786

HikariCP 整合spring

HikariCP 源码地址,具体参数配置详细参考: https://github.com/brettwooldridge/HikariCP pom com.zaxxer ...
  • zhf61584740
  • zhf61584740
  • 2016-09-27 11:49:54
  • 3476

SpringBoot整合HikariCP数据库连接池

本篇文章主要实现SpringBoot中使用hikariCP; 一 、使用工具 1. JDK1.8 2. springToolSuit(STS) 3. maven 二、创建项目 1.首先创...
  • chen15369337607
  • chen15369337607
  • 2017-09-30 14:54:57
  • 6309

数据库连接池HikariCP的配置

https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
  • brisling
  • brisling
  • 2016-11-30 13:44:24
  • 3550

HiKariCP数据库连接池

HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池 官网:https://github.com/brettwooldridge/HikariCP J...
  • zhuguorong11
  • zhuguorong11
  • 2017-07-11 10:42:32
  • 290

号称性能最好的JDBC连接池:HikariCP

HikariCP号称是现在性能最好的JDBC连接池组件,具体的性能到底如何,我也没有仔细的测试过,不过从它现在的发展来看,其可能确实如它宣传的那样其性能高过目前所有的连接池组件。之前对连接池的记忆一直...
  • abc_key
  • abc_key
  • 2015-06-10 01:27:32
  • 11626

数据库连接池HikariCP创建数据源demo

HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池。官网:https://github.com/brettwooldridge/HikariCPMaven...
  • canot
  • canot
  • 2016-05-21 15:46:57
  • 7595

HikariCP 高性能的 JDBC 连接池

HikariCP 是一个高性能的 JDBC 连接池组件。下图是性能的比较测试结果: 使用方法: HikariConfig config = new HikariConfig(); co...
  • well386
  • well386
  • 2017-01-09 10:40:53
  • 596
收藏助手
不良信息举报
您举报文章:MyBatis 外接 HikariCP 连接池 (无Spring)
举报原因:
原因补充:

(最多只允许输入30个字)