怎么配置使用HikariCP数据源
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章主要介绍"怎么配置使用HikariCP数据源",在日常操作中,相信很多人在怎么配置使用HikariCP数据源问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么配
千家信息网最后更新 2025年02月22日怎么配置使用HikariCP数据源
这篇文章主要介绍"怎么配置使用HikariCP数据源",在日常操作中,相信很多人在怎么配置使用HikariCP数据源问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么配置使用HikariCP数据源"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
使用场景
HikariCP 这个数据源号称是最快的数据源。 其实个人认为 性能肯定还是在SQL语句和数据库。而且 这个数据源功能其实并不多。
个人不喜欢使用 将其作为主数据源。
druid 数据源对比
但是 如果将 HikariCP 作为读取 读取第三方 数据库 也就是多数据源来 使用,个人认为是非常适合的。
多数据源配置
package com.door.remote.dataSource;import cn.hutool.cache.CacheUtil;import cn.hutool.cache.impl.TimedCache;import cn.hutool.db.Db;import com.door.common.constants.DbConst;import com.door.common.constants.biz.dr.DbSetType;import com.door.entity.dr.AcDrDbSource;import com.door.utils.db.CfsDatabase;import com.zaxxer.hikari.HikariDataSource;import lombok.extern.log4j.Log4j2;import org.apache.commons.lang3.StringUtils;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;import javax.sql.DataSource;import java.sql.SQLException;/** * 数据源管理器 * * @author oumin * @date 2021/1/23 10:01 */@Component@Log4j2public class DataSourceManager { // 24 小时超时 private static final long timeOut = 24 * 60 * 60 * 1000L; private final Object createLock = new Object(); private static final TimedCachetimedDataSourceCache = CacheUtil.newTimedCache(timeOut); @PostConstruct // 初始化方法的注解方式 等同与init-method=init public void init() { // 启动定时任务,每 xx 毫秒 检查一次过期 timedDataSourceCache.schedulePrune(timeOut); } /** * 获取数据源 * * @return */ public DataSource getAndMaybePut(CfsDatabase cfsDatabase) { String key = cfsDatabase.toString(); DataSource curr = timedDataSourceCache.get(key); if (curr == null) { synchronized (this.createLock) { curr = timedDataSourceCache.get(key); if (curr == null) { timedDataSourceCache.put(key, this.createDataSource(cfsDatabase)); } return timedDataSourceCache.get(key); } } else { return curr; } } private DataSource createDataSource(CfsDatabase cfsDatabase) { HikariDataSource dataSource = new HikariDataSource(); dataSource.setDriverClassName(DbConst.getDbDriverByDbType(cfsDatabase.getDbType())); if (DbSetType.DB_MYSQL.getName().equalsIgnoreCase(cfsDatabase.getDbType())) { // 兼容 MYSQL8 时区,和 指定连接超时 connectTimeout=20000 , 和 不使用 SSL: characterEncoding=utf- 8&useSSL=false&serverTimezone=Hongkong String timeZone = cfsDatabase.getTimeZone(); String url = cfsDatabase.getUrl(); String urlDb = ""; if (StringUtils.isNoneBlank(timeZone)) { urlDb = DbConst.MYSQL_URL + url + DbConst.MYSQL_STR + timeZone + DbConst.MYSQL_TIME_OUT; } else { // 如果timeZone 为空,mysql就用默认的时区 urlDb = DbConst.MYSQL_URL + url + DbConst.MYSQL_STR_ZOOR + DbConst.MYSQL_TIME_OUT; } dataSource.setJdbcUrl(urlDb); } else { dataSource.setJdbcUrl(cfsDatabase.getUrl()); } dataSource.setUsername(cfsDatabase.getUserName()); dataSource.setPassword(cfsDatabase.getPassword()); // dataSource.setPassword(PasswordKey.getDecodePassword(source.getDatasourcePassword())); dataSource.setMaximumPoolSize(10); dataSource.setMinimumIdle(1); // 默认 30S // dataSource.setConnectionTimeout(source.getConnTimeout()); // 修复 连接超时异常 // 默认false . 目前业务都是查询而已 // dataSource.setReadOnly(true); 只读模式,如果数据库支持 只读模式才有优化效果,否则没有 // 单位都是毫秒以下的 dataSource.setIdleTimeout(60 * 1000L); dataSource.setValidationTimeout(3 * 1000L); dataSource.setMaxLifetime(300 * 1000L); // mysql 和 Oracle 使用 SELECT 1 FROM DUAL ,其他 数据库 使用 select 1 // 虽然 官网 不推荐配置这个 TestQuery 而是在数据库支持JDBC4规范的情况下就不要配置。但是避免麻烦还是配置加上了 dataSource.setConnectionTestQuery(DbConst.getTestSQL(cfsDatabase.getDbType())); dataSource.setPoolName("数据源ID" + cfsDatabase.getSourceId()); return dataSource; } /** * 测试SQL * * @param sql 测试SQL * @param dbSource 测试数据源 */ public void testSQL(String sql, AcDrDbSource dbSource) throws SQLException { log.info("测试SQL :{}", sql); CfsDatabase database = CfsDatabase.converterByDataSource(dbSource); DataSource dataSource = this.getAndMaybePut(database); Db.use(dataSource).query(sql); }}
到此,关于"怎么配置使用HikariCP数据源"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
数据
数据源
配置
数据库
学习
测试
个人
方法
时区
更多
模式
还是
帮助
支持
实用
最快
接下来
业务
也就是
任务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
海淀区标准网络技术服务信息推荐
android版软件开发
天问软件开发
成立网络安全自查工作组
网络安全现状怎样
sql如何显示数据库名称
中心组 网络安全
数据库二级好过么
三级网络技术技巧性
地下城卢克服务器
供应优惠的云数据库rds
人大金仓数据库出现连接问题
重庆网络技术单招培训计划
5g时代网络安全先行
怀旧服服务器哪个版本好
计算机网络技术陈立岩刘亮
数据库状态字段如何变更
数据库开发转型大数据
南通专业服务器供应商
使命召唤16 服务器连接不上
稳定app软件开发外包
神舟数据库密码错误次数上限
谷歌服务器连接不上
网络技术SRP全称
speedtest测速服务器搭建
信息安全和网络安全薪资哪个高
学习网络安全需要哪些课程
多单元服务器是什么
手机服务器安全怎么设置
招聘软件开发商