关闭 HikariPool 中的连接
Closing connection in HikariPool
我有一个独立的 java 应用程序,它使用 Hikaricp 获取消息流、批处理并将它们插入 SQL 服务器数据库。
目前我做的是:
- 从池中获取连接。
- 创建准备好的语句以使用连接插入
- 执行批量插入。
请注意,我从不关闭连接!当我达到 maxPoolSize (20) 时,我在尝试建立新连接时遇到错误。
我应该在每次批量插入后关闭连接吗?
- 从池中获取连接。
- 创建准备好的语句以使用连接插入
- 执行批量插入。
- 关闭准备好的语句和连接。
但是,这意味着我要承担从池中获取连接 + 在每次批量插入后创建新的准备好的语句的成本。
这是推荐的方法还是有任何替代方法可以减少这种额外成本?
您需要关闭连接。通常将 return 连接包装到另一个对象中。当您在包装器上调用 close
时,它只是将内部数据库连接标记为空闲并将其 return 发送到池中。
您还可以重用现有的 PreparedStatement
对象,如果它们相同的话。如果您的每个任务都必须使用其唯一的 PreparedStatement
(由于您的业务逻辑),那么没有其他方法,您必须为每个任务创建新的 PreparedStatement
。
我有一个独立的 java 应用程序,它使用 Hikaricp 获取消息流、批处理并将它们插入 SQL 服务器数据库。
目前我做的是:
- 从池中获取连接。
- 创建准备好的语句以使用连接插入
- 执行批量插入。
请注意,我从不关闭连接!当我达到 maxPoolSize (20) 时,我在尝试建立新连接时遇到错误。
我应该在每次批量插入后关闭连接吗?
- 从池中获取连接。
- 创建准备好的语句以使用连接插入
- 执行批量插入。
- 关闭准备好的语句和连接。
但是,这意味着我要承担从池中获取连接 + 在每次批量插入后创建新的准备好的语句的成本。
这是推荐的方法还是有任何替代方法可以减少这种额外成本?
您需要关闭连接。通常将 return 连接包装到另一个对象中。当您在包装器上调用 close
时,它只是将内部数据库连接标记为空闲并将其 return 发送到池中。
您还可以重用现有的 PreparedStatement
对象,如果它们相同的话。如果您的每个任务都必须使用其唯一的 PreparedStatement
(由于您的业务逻辑),那么没有其他方法,您必须为每个任务创建新的 PreparedStatement
。