当前位置: 首页 > 知识库问答 >
问题:

Vertx-关闭连接-JDBC和其他

桂飞翼
2023-03-14

我有一个verticle,它使用来自事件总线的消息并对其进行处理。我有一个问题,JDBC连接应该在什么时候关闭。有两种方法

>

  • 消息处理完毕后关闭连接。但这将是非常昂贵的,因为我将打开/关闭连接每次。

    相信verticle停止/取消部署时vertx会关闭连接(实际上永远不会),并且只要连接打开,就不会有任何内存泄漏。我将在start()方法中打开连接,这样每当有消息时它就可用。

    另一方面,如果我有一个弹性搜索后端,并且我正在使用弹性搜索SDK,它有一个特定的方法来关闭客户端,那么连接应该在什么时候真正关闭?

  • 共有2个答案

    狄灵均
    2023-03-14

    您可以随时将清理代码放入Verticle界面的Stop()方法中。当verticle启动其un deploy过程时,将调用它。

    见Vert。x文档

    杜俊远
    2023-03-14

    使用一个连接池,这将减少关闭/打开连接的大部分成本。使用连接池时,关闭连接会将其返回到连接池以供重复使用。

    基本的使用模式是:

    try (Connection connection = dataSource.getConnection()) {
      // use connection
    }
    

    在块的末尾,连接被关闭,如果dataSource有一个连接池,则该连接将可供重复使用。

     类似资料:
    • 嗨,我只知道这是一个古老的问题,但今天只是好奇。正如我们所知connection.close也会关闭preared语句(如果我错了请纠正我)。但是如果我关闭连接然后关闭preared语句会怎样 我会得到一个空指针异常吗? 有人说这取决于jvm的速度。有时,ps.close()会在conn.close完成其工作之前运行并首先关闭,因此您不会得到null指针。 为了测试它,我修改了代码 但是我没有得到

    • 问题内容: 我们使用JDBC的标准代码部分是… 问题1:使用连接池时,是否应该在最后关闭连接?如果是这样,合并的目的就不会丢失吗?如果不是,那么DataSource如何知道何时释放Connection的特定实例并可以重用?我对此感到有些困惑,任何指针都表示赞赏。 问题2:以下方法是否接近标准?看起来像是尝试从池中获取连接,并且如果无法建立DataSource,请使用老式的DriverManager

    • 我编写了以下代码来连接到Oracle数据库。这用于REST API。我正在连接的数据库的IDLE_TIME参数设置为30分钟(这不能更改)。如果数据库连接空闲超过30分钟,则会抛出以下错误:“java.sql.SQLRecoverableException: ClosedConnection”。抛出此错误后,API将停止工作。我如何解决这个问题?

    • 问题内容: 我们使用JDBC的标准代码部分是… 问题1:使用连接池时,是否应该在最后关闭连接?如果是这样,合并的目的就不会丢失吗?如果不是,那么DataSource如何知道何时释放Connection的特定实例并可以重用?我对此感到有些困惑,任何指针都表示赞赏。 问题2:以下方法是否接近标准?看起来像是尝试从池中获取连接,并且如果无法建立DataSource,请使用老式的DriverManager

    • 我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)

    • 我最近转到了一个项目,在这个项目中我遇到了很多这种性质的代码--(这是使用jdbc postgres驱动程序) 显然,这段代码已经在生产中运行了一段时间,没有引起问题。 为了进一步澄清,如果我的理解是正确的(即,statement和resultset必须在连接关闭之前而不是之后关闭),我需要在catch和finally之间重复一些代码。修订后的代码如下所示。这可以简化吗? 只是为了透视,这段代码是