servlet 线程的数据库连接? [复制]
Posted
技术标签:
【中文标题】servlet 线程的数据库连接? [复制]【英文标题】:Database connections for servlet threads? [duplicate] 【发布时间】:2012-10-25 10:27:58 【问题描述】:关于 servlet 默认是多线程的,每个 servlet 是实例化数据库连接还是该 servlet 的所有线程之间共享连接?
我使用 JDBC 作为我的 servlet 和 Oracle 数据库之间的接口。
如果一个数据库连接在所有线程之间共享,这是否意味着我应该对数据库使用连接池?
/** Open the connection here **/
public void init()
String url = "server";
String username = "pwd";
String password = "usr";
try
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection(url, username, password);
catch (Exception e)
System.err.println("Error making pool: " + e);
conn = null;
【问题讨论】:
这完全取决于如何获得连接,但您没有显示或描述任何相关代码。 @MattBall ;添加的代码。如您所见,我在初始化 servlet 时建立了连接。 【参考方案1】:如果一个数据库连接在所有线程之间共享,这是否意味着我应该对数据库使用连接池?
是的,当然! JDBC 连接和单线程而不是线程安全的。只需在两者之间引入连接池,首先获取连接并在同一请求期间尽快关闭它。
【讨论】:
请给我的问题+1:0【参考方案2】:根据您编写连接的方式,它可以是每个 servlet(实例变量)或全局(静态变量 - 如果您不在集群环境中并且您管理并发,这将是一个严重的瓶颈)
但是,如果您想让您的系统高效、可靠、可扩展、更易于维护,并且不必实现更高级的功能,例如在链接失败的情况下重新连接(考虑到您的后端是 Oracle,我认为是这种情况) 你应该看看你的应用服务器连接池机制。
【讨论】:
谢谢,这个应用程序将在某个布满灰尘的房间里的一个盒子上运行。 :)以上是关于servlet 线程的数据库连接? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何正确连接我的 servlet 和我的帖子表单? [复制]