如果连接关闭(例如,在数据库服务器上,不是因为我将其关闭),我想自动重新连接并重新发送上一个SQL查询。
我知道在发送每个查询之前我可以做connection.isValid()
(在大多数驱动程序实现中只是SELECT 1
),但这很浪费。我将为每个查询添加往返延迟。
我想要的是更多类似的东西:
Exception
。有什么建议吗?我无法想象我是第一个想要这样的人。
我正在考虑在驾驶员的java.sql.Connection
周围做一个包装纸,并在幕后运行此算法,但是如果有东西存在,我希望不必重新发明它(我尝试用Google搜索,但什么也找不到)。
PS:我不需要连接池,因为我将在AWS Lambda实例中使用该连接池,并且我知道的所有连接池都将在每次查询之前运行isValid
。
答案 0 :(得分:0)
在重新建立断开的连接之后,在java.sql.Connection
周围编写自己的包装程序以捕获错误并重试语句听起来很吸引人,但随后还需要编写自己的PreparedStatement
,依此类推,对吧?
最好将所有JDBC调用集中在应用程序中的几个位置,即为JDBC调用编写自己的(精简)抽象。然后,您可以将重试魔术放在一处。
我肯定会使用连接池。任何值得使用的连接池都可以配置为不将查询发送到服务器。即使您无法避免这种情况,它也比打开和关闭数据库连接便宜很多。