servlet线程的java数据库连接?
关于默认情况下多线程的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;
}
}
# 1 楼答案
是的,当然!JDBC连接和单线程,而不是线程安全的。只需在两者之间引入连接池,首先获取连接,并在同一请求期间尽快关闭它
# 2 楼答案
根据您编写连接的方式,它可以是每个servlet(实例变量)或全局(静态变量——前提是您不在集群环境中,并且管理并发,这将是一个严重的瓶颈)
然而,如果你想让你的系统高效、可靠、可扩展、更容易维护,并且不需要实现更高级的功能,比如在发生链接故障时重新连接(考虑到你的后端是Oracle,我认为情况就是这样),你应该研究你的应用服务器连接池机制