java.sql.连接关闭/缓存最佳实践



关闭或缓存SQL连接的最佳实践是什么?
我看到事情说总是关闭它最终阻止。虽然我也看到一些事情在谈论缓存它们以备将来使用。

为每个任务打开新连接的成本有多高?

我刚刚开始开发别人编程的Java数据仓库应用程序。 (而且我没有DB经验)它是一个单线程应用程序,可将文件加载到数据库中,并进行一些聚合和分析。我们遇到了一些死锁问题,我认为这在单线程应用程序中不应该是问题。 我看到异常被吞噬并且没有记录在处理数据库连接的整个类中,所以我希望向这些添加日志记录应该提供一些见解。

但我希望在此期间获得一些关于处理数据库连接的最佳实践的指导。

无论是否使用连接池,任何数据库代码都应遵循以下形式:

try (
  Connection connection = dataSource.getConnection();
  PreparedStatement preparedStatement = ...
)
{
  ...
}

dataSource可以是池或简单的连接工厂,对您的代码来说,这无关紧要,它只是从哪里获取connection

也就是说,我会使用Spring的JdbcTemplate类,它几乎可以完成上述代码的功能。

关于"为每个任务打开新连接的成本有多高?"这个问题 - 答案是非常,至少与从池中抓取一个连接相比。 您还必须考虑如果运行大量任务会发生什么情况 - 大多数数据库将配置为限制连接数。

最重要的是,在最简单的应用程序中,您应该使用像c3po这样的连接池,并根据自己的需要调整其大小。

关于死锁,这很可能发生在数据库中,根据数据库的配置方式,在更新数据时可以进行各种锁。

最新更新