Java锅炉板代码:连接管理
处理连接池时,我们通常有以下代码:Java锅炉板代码:连接管理,java,connection-pooling,meta,Java,Connection Pooling,Meta,处理连接池时,我们通常有以下代码: connection c = pool.borrow(); try { business-logic-using-connection(c); } catch(connectionException e) { connectionBad = true; } finally{ if (connectionBad) { pool.evict(c); } else { pool.return(c);
connection c = pool.borrow();
try {
business-logic-using-connection(c);
}
catch(connectionException e) {
connectionBad = true;
}
finally{
if (connectionBad) {
pool.evict(c);
} else {
pool.return(c);
}
}
问题是如何使锅炉板代码更简单,以便可以执行以下操作:
getConnectionAndDoWork(pool, business-logic-code)
可以插入业务逻辑,而不必到处重复相同的连接管理代码。一种方法是为业务逻辑代码(如doWorkWithConnection
)创建一个接口,该接口接受连接并执行一些工作。但是,这限制了业务逻辑代码应该返回的内容
在Java中有更好的方法吗?使用Spring用于的回调模式
接口PooledConnectionCallback{
T销接头(接头c);
}
池池=新池(池参数);
整数returnedValue=pool.execute(
新建PooledConnectionCallback(){
公共整数连接(连接c){
int someReturnValue=使用连接的业务逻辑(c);
返回返回值;
}});
在<代码>池>执行< /代码>方法中,您可以拥有处理异常和清理所需的样板代码。 如果使用Spring,请考虑使用JDCB模板或NAMEDATABAREDJBCTMAPTIO: 即使不使用Spring,也可以使用相同的基本模板方法模式。只需谷歌“模板方法”。有很多关于它的文章。什么是池#执行签名?
T池#执行(PooledConnectionCallback)
interface PooledConnectionCallback<T> {
T doWithConnection(Connection c);
}
Pool pool = new Pool(poolParams);
Integer returnedValue = pool.execute(
new PooledConnectionCallback<Integer>() {
public Integer doWithConnection(Connection c) {
int someReturnValue = businessLogicUsingConnection(c);
return someReturnValue;
}});