DB数据源之SpringBoot+MyBatis踏坑过程(五)手动使用Hikari连接池

liuyuhang原创,未经允许禁止转载 

系列目录连接

DB数据源之SpringBoot+Mybatis踏坑过程实录(一)

1.环境说明

  springboot2.0以上版本,java8,myeclipse2017 C1,使用的是mySql数据库

  pom

  

 <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath />
</parent> <dependencies> <!-- spring boot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!-- 添加MySQL依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <!-- 添加JDBC依赖 重要-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<!--去掉默认的tomcat-jdbc的依赖 重要-->
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加 HikariCP数据源 重要-->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency> <!-- mybaits基础依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<!-- mybatis插件依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- mapper依赖 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.3.7</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency> <!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
<!-- end of 热部署 -->
</dependencies>

  使用Hikari连接池,需要禁用springboot内置的tomcat的连接池,同时要引入Hikari连接池的依赖

2.配置思路

  •   确保类单例,使用构造器实例化的sqlSessionFactory只设置一次
  •   提供getSqlSessionFactory获取sqlSessionFactory
  •   setSqlSessionFactory时初始化数据源,并设置连接池
  •   setSqlSessionFactory方法提供参数可对数据源进行更改,以确保数据源故障时可进行重新设置

3.所需类与结构

  3.1.pom,略

  3.2.DataConfig.java配置数据源获取SqlSessionFactory类

  3.3.mapper.xml,略

  3.4.HelloExample.java测试,略

  3.5.AppRun.java,Springboot启动类,略

4.代码

  DataConfig.java代码如下:

 package com.FM.config;

 import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import com.zaxxer.hikari.HikariDataSource; /**
* DataConfig,获取数据源,配置给SqlSessionFactory,并以此获取session
*
* @author liuyuhang
*/
@Configuration // 作为配置,交给spring管理
public class DataConfig { /**
* 数据源基础配置信息
*/
private String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/DataBaseName?cuseUnicode=true&characterEncoding=utf-8&useSSL=false";
private String driver = "com.mysql.jdbc.Driver";
private String username = "root";
private String password = "root"; /**
* sqlSessionFactory
*/
private SqlSessionFactory sqlSessionFactory; /**
* 双验证单例模式
*/
private static volatile DataConfig dataConfig; /**
* 构造并对sqlSessionFactory进行一次实例化
* @throws Exception
*/
public DataConfig() throws Exception {
System.out.println("DataConfig init");
setSessionFactory(url, driver, username, password);
} /**
* 提供双重锁单例,保证sqlSessionFactory只创建一次
* @return
* @throws Exception
*/
public static DataConfig getInstenceSingle() throws Exception {
if (dataConfig == null) {
synchronized (DataConfig.class) {
if (dataConfig == null) {
dataConfig = new DataConfig();
}
}
}
return dataConfig;
} /**
* 获取sqlSessionFactory的方法
*/
public SqlSessionFactory getSqlSessionFactory() throws Exception {
return sqlSessionFactory;
} /**
* 配置sqlSessionFactory的方法
* @param url
* @param driver
* @param username
* @param password
* @throws Exception
*/
public void setSessionFactory(String url, String driver, String username, String password) throws Exception {
// 创建基础hikari数据源
DataSourceBuilder<HikariDataSource> hikariDataSourceBuilder = DataSourceBuilder.create().type(HikariDataSource.class);
HikariDataSource hikariDataSource = hikariDataSourceBuilder.driverClassName(driver).url(url).username(username).password(password).build(); //配置Hikari连接池
hikariDataSource.setAutoCommit(true);//update自动提交设置
hikariDataSource.setConnectionTestQuery("select 1");//连接查询语句设置
hikariDataSource.setConnectionTimeout(3000);//连接超时时间设置
hikariDataSource.setIdleTimeout(3000);//连接空闲生命周期设置
hikariDataSource.setIsolateInternalQueries(false);//执行查询启动设置
hikariDataSource.setMaximumPoolSize(3000);//连接池允许的最大连接数量
hikariDataSource.setMaxLifetime(1800000);//检查空余连接优化连接池设置时间,单位毫秒
hikariDataSource.setMinimumIdle(10);//连接池保持最小空余连接数量
hikariDataSource.setPoolName("hikariPool");//连接池名称 // 创建sessionFactory
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(hikariDataSource);// 注入Hikari数据源
// 扫描mapper.xml
Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:com/FM/mapper/*.xml");
factoryBean.setMapperLocations(resources);
// 读取config
factoryBean.setConfigLocation(new DefaultResourceLoader().getResource("classpath:mybatis-config.xml"));
sqlSessionFactory = factoryBean.getObject();
System.out.println("setSessionFactory init");
} }

5.说明

  •   禁用tomcat连接池,并配置Hikari连接池很重要
  •   DataSourceBuilder使用的泛型应为HikariDataSource类
  •   DataSourceBuilder创建数据源时要一次性加载driverClassName,url,username,password,
  •   在不使用连接池情况下,直接加载数据源时,会导致mysql数据库开启连接数量持续增长到最大值,导致mysql数据库无法使用

6.测试

  测试时应观察mysql连接数量增长情况,总数量,对数据库进行多次请求。

后记:连接池的使用中应该也会有各种异常情况出现,将会一一记录下来,尝试解析!

以上!

DB数据源之SpringBoot+MyBatis踏坑过程(五)手动使用Hikari连接池的更多相关文章

  1. DB数据源之SpringBoot+Mybatis踏坑过程实录系列(一)

    DB数据源之SpringBoot+MyBatis踏坑过程(一) liuyuhang原创,未经允许进制转载 系列目录 DB数据源之SpringBoot+Mybatis踏坑过程实录(一) DB数据源之Sp ...

  2. DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许进制转载  吐槽之后应该有所改了,该方式可以作为一种过渡方式 ...

  3. DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许禁止转载    系列目录连接 DB数据源之Spr ...

  4. DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果

    DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果 liuyuhang原创,未经允许禁止转载  系列目录连接 DB数据源之SpringBoot+Mybatis踏坑过程实 ...

  5. DB数据源之SpringBoot+MyBatis踏坑过程(七)手动使用Tomcat连接池

    DB数据源之SpringBoot+MyBatis踏坑过程(七)手动使用Tomcat连接池 liuyuhang原创,未经允许禁止转载  系列目录连接 DB数据源之SpringBoot+Mybatis踏坑 ...

  6. DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量

    DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybati ...

  7. Springboot & Mybatis 构建restful 服务五

    Springboot & Mybatis 构建restful 服务五 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务四 2 restful ...

  8. spring boot:使用mybatis访问多个mysql数据源/查看Hikari连接池的统计信息(spring boot 2.3.1)

    一,为什么要访问多个mysql数据源? 实际的生产环境中,我们的数据并不会总放在一个数据库, 例如:业务数据库:存放了用户/商品/订单 统计数据库:按年.月.日的针对用户.商品.订单的统计表 因为统计 ...

  9. shardingsphere多数据源(springboot + mybatis+shardingsphere+druid)

    org.springframeword.boot:spring-boot-starer-web: 2.0.4release io.shardingsphere:sharding-jdbc-spring ...

随机推荐

  1. Codeforces183D T-shirt

    传送门 这题好神啊……(然而我连每种物品贡献独立都没看出来…… 首先$O(n^2 m)$的DP肯定都会写,然后可以发现每种物品一定是选得越多再选一个的收益就越低,因此可以用一个堆维护当前收益最高的物品 ...

  2. Idea15 常用设置(一):JDK、SVN

      1:显示行号  File->Settings->General->Appearance 2: 代码自动补齐即使是小写字母也会弹出代码补齐提示     3:自动编译 设置 4: 设 ...

  3. 浅谈PVC塑料配方计算软件的设计

    1, 配方设计与配方计算 题目是配方计算,不是配方设计,设计是需要有深厚的塑料知识才可以做的,即生产什么塑料产品,需要放各种原料是什么,各自比较是多少,遇到什么情况下就要多放什么,少放什么.配方设计不 ...

  4. atoi、itoa,strcpy,strcmp,memcpy等实现

    原文:http://www.cnblogs.com/lpshou/archive/2012/06/05/2536799.html 1.memcpy.memmove.memset源码 link:http ...

  5. 消息循环中的TranslateMessage函数和DispatchMessage函数,特别注意WM_TIMER消息

    原文:http://www.cnblogs.com/xingrun/p/3583357.html TranslateMessage函数 函数功能描述:将虚拟键消息转换为字符消息.字符消息被送到调用线程 ...

  6. 用Eclipse创建第一个Spring项目(最最入门级)

    http://blog.csdn.net/shymi1991/article/details/48085955 网上关于Spring的介绍资料已经数不胜数,但大多篇幅冗长,初学者不易理解记忆.这里先作 ...

  7. tpcc-mysql安装测试与使用生成对比图

    1:下载tpcc-mysql的压缩包,从下面的网站进行下载 https://github.com/Percona-Lab/tpcc-mysql 也可直接从叶总博客直接下载: http://imysql ...

  8. %02hhX

    大家经常会遇到将 调试信息例如从网络收到的数据包 或者 转换后的数据 打印出来,调试问题. 如果以ascii码打印的话,控制字符和ascii码以外的字符不能很好的查看具体值(看不到,或者乱码,尤其对于 ...

  9. February 11 2017 Week 6 Saturday

    Love means never having to say you're sorry. 爱就是永远不必说对不起. Yesterday I heard an interesting story fro ...

  10. ZT 段祺瑞终生忏悔枪杀学生?

    段祺瑞终生忏悔枪杀学生?http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece76310528c315c4380146080955468d4e4 ...