sim*_*ico 1 postgresql multithreading servlets jdbc
我的Web应用程序中的数据库连接存在严重问题.由于我从singleton Database类为整个应用程序使用单个数据库连接,如果我尝试并发数据库操作(两个用户),数据库将回滚事务.这是我使用的静态方法:
所有线程/ servlet都调用静态Database.doSomething(...)方法,这些方法又调用以下方法.
private static /* synchronized*/ Connection getConnection(final boolean autoCommit) throws SQLException {
if (con == null) {
con = new MyRegistrationBean().getConnection();
}
con.setAutoCommit(true); //TODO
return con;
}
Run Code Online (Sandbox Code Playgroud)
管理这个数据库连接的推荐方法是什么,所以我不会遇到同样的问题.
Connection
永远保持开放是一个非常糟糕的主意.它没有无限的生命周期,每当数据库超时连接并关闭它时,您的应用程序可能会崩溃.最佳实践是获取和关闭Connection
,Statement
并ResultSet
在尽可能短的范围内避免资源泄漏和由泄漏和超时引起的潜在应用程序崩溃.
由于连接数据库是一项昂贵的任务,因此您应该考虑使用连接池来提高连接性能.一个体面的applicationserver/servletcontainer通常已经提供了JNDI风格的连接池功能DataSource
.有关如何创建它的详细信息,请参阅其文档.例如Tomcat,你可以在这里找到它.
即使使用连接池,您仍然必须编写适当的JDBC代码:在尽可能短的范围内获取并关闭所有资源.连接池将担心实际关闭连接或仅将其释放回池以供进一步重用.
您可以从本文中获得更多有关如何以正确方式执行JDBC基础知识的见解.作为一个完全不同的替代方案,学习EJB和JPA.它将把你所有的JDBC样板抽象为oneliner.
希望这可以帮助.
归档时间: |
|
查看次数: |
778 次 |
最近记录: |