zoukankan      html  css  js  c++  java
  • 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 的最佳作用域是应用作用域。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

  • 相关阅读:
    Qt中的多线程编程
    c#实现内存映射文件共享内存
    Visual Studio 2019 使用C语言创建动态链接库(Dll)并使用C语言和C#实现调用
    Qt中子窗口关闭之后,立即释放资源的方法
    qt 定义插件
    UWP C# 调用 C++/CX
    Fedora Core 11 Alpha试用视频(由于youtube问题暂时无法访问)
    Linux下截图技巧
    使用无线局域网(WLAN)更需要注意加强安全防范
    Linux系统下到哪儿寻找硬件错误
  • 原文地址:https://www.cnblogs.com/yoyotl/p/10458412.html
Copyright © 2011-2022 走看看