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-plus Invalid bound statement (not found) 问题


下一篇:SqlSessionFactory及SqlSession