gpt4 book ai didi

multithreading - 如何管理服务器上的数据库连接?

转载 作者:行者123 更新时间:2023-11-29 12:31:50 24 4
gpt4 key购买 nike

我的 Web 应用程序中的数据库连接存在严重问题。由于我对单例数据库类的整个应用程序使用单个数据库连接,如果我尝试并发数据库操作(两个用户),数据库将回滚事务。这是我使用的静态方法:

所有线程/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;
}

管理我拥有的这个数据库连接的推荐方法是什么,这样我就不会遇到同样的问题。

最佳答案

Connection 永远打开是一个非常糟糕的主意。它没有无限的生命周期,只要数据库超时并关闭它,您的应用程序就可能崩溃。最佳做法是在最短中获取关闭ConnectionStatementResultSet避免资源泄漏和由泄漏和超时引起的潜在应用程序崩溃的可能范围。

由于连接数据库是一项昂贵的任务,您应该考虑使用连接池来提高连接性能。一个体面的应用程序服务器/servlet 容器通常已经提供了 JNDI DataSource 风格的连接池功能。有关如何创建它的详细信息,请参阅其文档。例如 Tomcat,您可以找到它 here .

即使在使用连接池时,您仍然必须编写正确的 JDBC 代码:在尽可能短的范围内获取关闭所有资源。连接池将依次担心实际关闭连接或只是将其释放回池以供进一步重用。

您可能会从 this article 中获得更多见解如何以正确的方式学习 JDBC 基础知识。作为完全不同的选择,学习 EJB 和 JPA。它将为您抽象出所有 JDBC 样板文件到单行代码中。

希望这对您有所帮助。

另见:

关于multithreading - 如何管理服务器上的数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2979415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com