mybatis整合hikariCP(非spring)

Posted 一沙世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis整合hikariCP(非spring)相关的知识,希望对你有一定的参考价值。

mybatis整合hikariCP(非spring)

一、配置hikariCP
典型的配置文件hikariPool.properties

jdbcUrl=jdbc:mysql://localhost:3306/omc?characterEncoding=utf8&serverTimezone=UTC
dataSource.user=remote
dataSource.password=xxxxxx
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
dataSource.useLocalSessionState=true
dataSource.rewriteBatchedStatements=true
dataSource.cacheResultSetMetadata=true
dataSource.cacheServerConfiguration=true
dataSource.elideSetAutoCommits=true
dataSource.maintainTimeStats=false
# 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒
dataSource.connectionTimeout=30000
# 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 -->
dataSource.idleTimeout=600000
# 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟
# 建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like %timeout%;)
dataSource.maxLifetime=1800000
# 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count)
# core_count CPU的内核数量
# effective_spindle_count is the number of disks in a RAID.就是磁盘列阵中的硬盘数
dataSource.maximumPoolSize=10

 

二、hikariCP绑定mybatis并初始化

public class HikariDataSourceFactory extends     
    UnpooledDataSourceFactory {
    public HikariDataSourceFactory(){
    HikariConfig config = new HikariConfig("hikariPool.properties");
    config.setMaximumPoolSize(5);
    this.dataSource = new HikariDataSource(config);
  }
}

 

这个UnpooledDataSourceFactory类就是Mybatis提供的用于第三方连接池覆盖DataSource的入口。

三、mybatis配置
典型的配置文件sqlMapConf.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="com.tool.db.pool.HikariDataSourceFactory"/> <!-- 步骤2的类的路径 -->
    </environment>
  </environments>
  <mappers>
    <package name="com.tool.db.builder"/> <!-- 各种xml映射文件的包路径 -->
  </mappers>
</configuration>

 

四、mybatis整合并初始化

String resource = "sqlMapConfig.xml";

InputStream inputStream = null;
try {
    inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
    e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
......

 

五、关于SqlSessionFactory的变量范围
SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。
使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。
因此 SqlSessionFactory 的最佳作用域是应用作用域。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

以上是关于mybatis整合hikariCP(非spring)的主要内容,如果未能解决你的问题,请参考以下文章

阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-14 数据层HikariCP与MyBatis整合

springboot整合数据源mybatis

MyBatis学习:与Spring整合(非注解方式配置MyBatis)

spring boot 整合连接池

spring boot + mybatis + druid

mybatis学习笔记(14)-spring和mybatis整合