2

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

所以情况是

  • 它是一个 WebApp 和多用户环境(大约 1000 个用户同时使用)
  • 我正在使用支持连接池的容器(Weblogic Server)
  • 我在 JDBC 调用中使用事务
  • 我的大多数 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 个用户来说是可以的

在采用其中一种方法之前,我还有什么需要考虑的吗

4

1 回答 1

4

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

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

With properly-configured connection pooling, the overhead of releasing and re-obtaining a connection should be minmal, so I'd suggest approach #2. When pooled, closing the connection doesn' really close it, it leaves it open and returns it to the pool.

于 2012-10-25T01:15:06.770 回答