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 的最佳作用域是應用作用域。有很多方法可以做到,最簡單的就是使用單例模式或者靜態單例模式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM