mybatis整合hikariCP(非spring)

mybatis整合hikariCP(非spring)mysql

1、配置hikariCP
典型的配置文件hikariPool.propertiesspring

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

 

2、hikariCP綁定mybatis並初始化sql

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

 

這個UnpooledDataSourceFactory類就是Mybatis提供的用於第三方鏈接池覆蓋DataSource的入口。數據庫

3、mybatis配置
典型的配置文件sqlMapConf.xmlmybatis

<?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>

 

4、mybatis整合並初始化app

String resource = "sqlMapConfig.xml";ide

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

 

5、關於SqlSessionFactory的變量範圍
SqlSessionFactory 一旦被建立就應該在應用的運行期間一直存在,沒有任何理由對它進行清除或重建。
使用 SqlSessionFactory 的最佳實踐是在應用運行期間不要重複建立屢次,屢次重建 SqlSessionFactory 被視爲一種代碼「壞味道(bad smell)」。
所以 SqlSessionFactory 的最佳做用域是應用做用域。有不少方法能夠作到,最簡單的就是使用單例模式或者靜態單例模式。ui

相關文章
相關標籤/搜索