当前位置:网站首页>Customize MySQL connection pool
Customize MySQL connection pool
2022-06-28 00:05:00 【InfoQ】
commons-pool2
jedis
commons-pool2
commons-pool2
Poolable object
com.funtester.db.mysql.FunMySql
package com.funtester.db.mysql;
import com.funtester.base.interfaces.IMySqlBasic;
import com.funtester.config.SqlConstant;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* mysql Basic classes of operations
* <p> For storing data , More for reptiles </p>
*/
public class FunMySql extends SqlBase implements IMySqlBasic {
/**
* {@link SqlConstant#FUN_SQL_URL} Will replace IP To URL
*/
String url;
/**
* library
*/
String database;
/**
* user
*/
String user;
/**
* password
*/
String password;
Connection connection;
Statement statement;
/**
* Private constructor
*
* @param url Connection address , Including ports
* @param database library
* @param user user name
* @param password password
*/
public FunMySql(String url, String database, String user, String password) {
this.url = url;
this.database = database;
this.user = user;
this.password = password;
getConnection(database);
}
/**
* Initialize connection
*/
@Override
public void getConnection() {
getConnection(EMPTY);
}
/**
* perform sql sentence , Not query sentence , Do not close the connection
*
* @param sql
*/
@Override
public void executeUpdateSql(String sql) {
SqlBase.executeUpdateSql(connection, statement, sql);
}
/**
* Query function
*
* @param sql
* @return
*/
@Override
public ResultSet executeQuerySql(String sql) {
return SqlBase.executeQuerySql(connection, statement, sql);
}
/**
* close query Connect
*/
@Override
public void over() {
SqlBase.close(connection, statement);
}
@Override
public void getConnection(String database) {
if (connection == null)
connection = SqlBase.getConnection(SqlConstant.FUN_SQL_URL.replace("ip", url).replace("database", database), user, password);
if (statement == null) statement = SqlBase.getStatement(connection);
}
}
Pool chemical plant
com.funtester.db.mysql.FunMySql
com.funtester.db.mysql.MysqlPool.FunTester#destroyObject
/**
* Pool chemical plant
*/
private class FunTester extends BasePooledObjectFactory<FunMySql> {
@Override
FunMySql create() throws Exception {
return new FunMySql(url, database, user, password)
}
@Override
PooledObject<FunMySql> wrap(FunMySql obj) {
return new DefaultPooledObject<FunMySql>(obj)
}
@Override
void destroyObject(PooledObject<FunMySql> p) throws Exception {
p.getObject().over()
super.destroyObject(p)
}
}
Object pool
com.funtester.db.mysql.MysqlPool
com.funtester.db.mysql.FunMySql
/**
* Customize MySQL Connect pool objects
*/
class MysqlPool extends PoolConstant {
private static final Logger logger = LogManager.getLogger(MysqlPool.class);
/**
* {@link com.funtester.config.SqlConstant#FUN_SQL_URL} Will replace IP To URL*/
String url;
/**
* library
**/
String database;
/**
* user
**/
String user;
/**
* password
**/
String password;
private GenericObjectPool<FunMySql> pool
MysqlPool(String url, String database, String user, String password) {
this.url = url
this.database = database
this.user = user
this.password = password
init()
}
/**
* Initialize connection pool
* @return
*/
def init() {
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxTotal(MAX);
poolConfig.setMinIdle(MIN_IDLE);
poolConfig.setMaxIdle(MAX_IDLE);
poolConfig.setMaxWaitMillis(MAX_WAIT_TIME);
poolConfig.setMinEvictableIdleTimeMillis(MAX_IDLE_TIME);
pool = new GenericObjectPool<FunMySql>(new FunTester(), poolConfig);
}
}
API encapsulation
/**
* Lending to
* @return
*/
def borrow() {
try {
return pool.borrowObject()
} catch (e) {
logger.warn(" obtain ${JSONObject.class} Failure ", e)
} finally {
new JSONObject()
}
}
/**
* Return the object
* @param funMySql
* @return
*/
def back(FunMySql funMySql) {
pool.returnObject(funMySql)
}
/**
* perform update SQL
* @param sql
* @return
*/
def execute(def sql) {
def driver = borrow()
try {
driver.executeUpdateSql(sql)
} catch (e) {
logger.warn(" perform :{} Failure ", sql)
} finally {
back(driver)
}
}
/**
* Execute the query SQL
* @param sql
* @return
*/
def query(def sql) {
def driver = borrow()
try {
return driver.executeQuerySql(sql)
} catch (e) {
logger.warn(" perform :{} Failure ", sql)
} finally {
back(driver)
}
}
- Performance test topics
- Java、Groovy、Go、Python
- Single measurement & White box
- FunTester Community style
- Test theory chicken soup
- Special topic of interface function test
- FunTester Video topics
- Case sharing : programme 、BUG、 Reptiles
- UI Automation topics
- Test tools topic
Read the original , Jump to my warehouse address
边栏推荐
- [try to hack] kill evaluation
- 什么是cookie,以及v-htm的安全性隐患
- apipost脚本使用讲解一~全局变量
- golang使用mongo-driver操作——查(进阶)
- NDSS 2022 received list
- Character interception triplets of data warehouse: substrb, substr, substring
- mysql数据库旅游管理系统_JSP+MySQL基于ssm的旅游管理系统[通俗易懂]
- 十大券商注册账户安全吗,会有风险吗?
- What are the ways to combine the points system with marketing activities
- flutter系列之:flutter中的变形金刚Transform
猜你喜欢
Transmitting and receiving antenna pattern
Eliminate gaps around El image images
Sécurité, économie de carburant et protection de l'environnement chameau
Structure de stockage des graphiques
【无标题】
【PCL自学:PCLPlotter】PCLPlotter绘制数据分析图
吴恩达《机器学习》课程总结(13)_聚类
flutter系列之:flutter中的变形金刚Transform
[microservices sentinel] sentinel data persistence
赛尔笔记|视频文本预训练简述
随机推荐
使用cef3开发的浏览器不支持flash问题的解决
ASP.NET仓库进销存ERP管理系统源码 ERP小程序源码
Course strategy sharing plan of Zhejiang University
NDSS 2022 received list
SCU|通过深度强化学习进行微型游泳机器人的步态切换和目标导航
Flutter series: Transformers in flutter
单片机之IIC通信协议「建议收藏」
MySQL分表查询之Merge存储引擎实现
Systematic learning + active exploration is the most comfortable way to get started!
Zero foundation self-study SQL course | if function
VMware virtual machine bridging connectivity
零基础自学SQL课程 | IF函数
Elk in Windows Environment - logstash+mysql (4)
【无标题】
圖的存儲結構
[VIM] tutorial, common commands, efficient use of vim editor
Mise en œuvre du pool de Threads: les sémaphores peuvent également être considérés comme de petites files d'attente
认识微信小程序项目的基本组成结构
内网IP和公网IP的区别及作用
[AI application] detailed parameters of NVIDIA geforce RTX 1080ti