当前位置:网站首页>Customize MySQL connection pool
Customize MySQL connection pool
2022-06-28 00:05:00 【InfoQ】
commons-pool2jediscommons-pool2commons-pool2Poolable object
com.funtester.db.mysql.FunMySqlpackage 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.FunMySqlcom.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.MysqlPoolcom.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 边栏推荐
- 什么是cookie,以及v-htm的安全性隐患
- Feign implements path escape through custom annotations
- MySQL enterprise parameter tuning practice sharing
- 股市小白在网上股票开户安全吗?
- Eliminate gaps around El image images
- Is not null and in SQL= Difference between null
- Recyclerview implements grouping effects in a variety of ways
- Safe, fuel-efficient and environment-friendly camel AGM start stop battery is full of charm
- 一文剖析C语言函数
- 认识微信小程序项目的基本组成结构
猜你喜欢

Zero foundation self-study SQL course | if function

安全省油环保 骆驼AGM启停电池魅力十足

Flutter series: Transformers in flutter
![[idea] idea formatting code skills](/img/06/38079517e901bc48dc4ca0f8cc63fe.jpg)
[idea] idea formatting code skills
Does the subscription of Siyuan notes stop deleting cloud data directly?

VMware virtual machine bridging connectivity
![[PCL self study: pclplotter] pclplotter draws data analysis chart](/img/ca/db68d5fae392c7976bfc93d2107509.png)
[PCL self study: pclplotter] pclplotter draws data analysis chart

数仓的字符截取三胞胎:substrb、substr、substring
![[PCL self study: segmentation4] point cloud segmentation based on Min cut](/img/af/a6c5abf357c1db0718df505499df70.png)
[PCL self study: segmentation4] point cloud segmentation based on Min cut

Zero foundation self-study SQL course | complete collection of SQL basic functions
随机推荐
Course strategy sharing plan of Zhejiang University
[try to hack] kill evaluation
线程池实现:信号量也可以理解成小等待队列
Cornernet由浅入深理解
[paper reading | deep reading] sdne:structural deep network embedding
Can you do these five steps of single cell data cleaning?
Mise en œuvre du pool de Threads: les sémaphores peuvent également être considérés comme de petites files d'attente
Systematic learning + active exploration is the most comfortable way to get started!
[PCL self study: Segmentation3] PCL based point cloud segmentation: region growth segmentation
Local visualization tool connects to redis of Alibaba cloud CentOS server
虽然TCGA数据库有33种癌症
SQL报了一个不常见的错误,让新来的实习生懵了
C language character pointer and string initialization
Teach you how to transplant tinyriscv to FPGA
TIME_WAIT过多的解决办法
100 questions for an enterprise architect interview
Safe, fuel-efficient and environment-friendly camel AGM start stop battery is full of charm
[tinyriscv verilator] branch transplanted to Da Vinci development board of punctual atom
什么是cookie,以及v-htm的安全性隐患
【PCL自学:Segmentation3】基于PCL的点云分割:区域增长分割