Java 样板代码:连接管理

问题描述 投票:0回答:2

处理连接池时我们通常有以下代码:

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中做到这一点?

java connection-pooling
2个回答
2
投票

使用 Spring 用于编程式事务管理的回调模式。

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;
    }});

Pool#execute
方法中,您可以拥有处理异常和清理所需的样板代码。


0
投票

如果您使用 Spring,请考虑使用 JdbcTemplate 或 NamedParameterJdbcTemplate:

http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html

http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.html

即使您不使用Spring,您仍然可以使用相同的基本模板方法模式。只需谷歌“模板方法”即可。有很多关于它的文章。

© www.soinside.com 2019 - 2024. All rights reserved.