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

问题描述 投票:3回答:1

关闭或缓存SQL连接的最佳做法是什么? 我看到的事情总是在最后一块中关闭它。虽然我也看到有关缓存它们以供将来使用的事情。

为每项任务打开新连接的费用是多少?

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

但我希望在此期间就处理数据库连接的最佳实践提供一些指导。

java sql database-connection
1个回答
2
投票

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

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

dataSource可能是一个游泳池或一个简单的连接工厂,对你的代码它应该无关紧要,它只是它从connections得到的地方。

这就是说,我会使用Spring的JdbcTemplate类,它几乎完成了上面的代码。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.