servlet线程的数据库连接?

时间:2012-11-05 14:55:42

标签: java multithreading servlets jdbc

对于默认情况下多线程的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;
    }
}

2 个答案:

答案 0 :(得分:4)

  

如果所有线程之间共享数据库连接,这是否意味着我应该使用连接池到数据库?

是的,绝对是! JDBC连接和单线程而不是线程安全的。只需在两者之间引入连接池,首先获取连接并在同一请求期间尽快关闭它。

答案 1 :(得分:1)

根据您编写Connection的方式,它可以是per-servlet(实例变量)或全局(静态变量 - 假设您不在集群环境中,并且您管理并发,这将是一个严重的瓶颈)

但是,如果你想让你的系统高效,可靠,可扩展,更容易维护,而不必实现更高级的功能,例如在链路出现故障时重新连接(我认为考虑到你的后端是Oracle的情况)你应该研究你的应用服务器连接池机制。