Java JDBC连接在方法之间共享/中继

时间:2012-10-25 00:58:07

标签: java jdbc

我正在开发一个WebApp,并且想知道在方法之间是否存在共享JDBC连接对象的优点/缺点

所以情况是

  • 这是一个WebApp和多用户环境(aprox 1000用户同时使用)
  • 我正在使用支持连接池的容器(Weblogic Server)
  • 我在JDBC调用中使用Transactions
  • 我的大多数JDBC调用都是单个记录插入/更新,但选择/删除可以批量发生

现在我有两种方法

方法1 打开连接对象一次,然后将其传递给方法

// Just a Pseudo Code

Cn = OpenJDBConnection() // This will open up the  connection 
obj.Task1(Cn, Param1, Param2);
obj.Task2(Cn, Param1, Param2);
obj.Task3(Cn, Param1, Param2);
Cn.close();

方法2     在每种方法中打开和关闭连接

我倾向于方法1,因为这样我将能够避免一些样板代码。但我不确定它是线程安全的吗?我有一个100连接的池化,我认为对于在给定时间活动的1000个用户是可以的

在采用其中一种方法

之前还有其他我应该考虑的事情

1 个答案:

答案 0 :(得分:4)

考虑在连接级别管理事务。

对于您的简单用例,方法#1可能有效,但很容易进入这样一种情况,例如,您在连接上有待处理的事务,并调用另一个在同一连接上执行select的方法,这将导致您的事务提交(早于您的预期)。

通过正确配置的连接池,释放和重新获得连接的开销应该是最小的,所以我建议方法#2。当汇集时,关闭连接并不会真正关闭它,它会将其打开并将其返回到池中。