【问题标题】:Vertx - Closing connections - JDBC and othersVertx - 关闭连接 - JDBC 和其他
【发布时间】:2019-09-25 17:51:48
【问题描述】:

我有一个 Verticle,它使用来自事件总线的消息并处理它。我有一个关于何时应该关闭 JDBC 连接的问题。有两种方法

  1. 处理完消息后关闭连接。但这会非常昂贵,因为我每次都会打开/关闭连接。

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

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

【问题讨论】:

    标签: elasticsearch jdbc vert.x vertx-verticle


    【解决方案1】:

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

    基本的使用模式是:

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

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

    【讨论】:

    • 不会 createSharedDatasource 自动创建数据源。 SQLClient 客户端 = JDBCClient.createShared(vertx, config);
    • 我不知道 Vert.x,所以我从一般的 JDBC 角度回答。如果createSharedDatasource 创建的那个数据源提供了一个连接池,那么你的集合,你应该在每个工作单元结束时关闭连接。
    【解决方案2】:

    您可以随时将您的清理代码放在Verticle 接口的Stop() 方法中。当 Verticle 启动它的 un-deploy 过程时,它会被调用。

    Vert.x Docs

    【讨论】:

    • 嗨 - 我的问题真的是我是否可以让连接保持打开状态,直到 stop() 方法没有任何内存泄漏。我也想不出我什么时候会使用 stop() 方法..
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2013-02-19
    • 2021-02-17
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多