在 vertx 中启动时或一段时间后出现 JDBCClient 错误

JDBCClient errors on start or after some time in vertx

请原谅终端图片 - 我的项目设置很糟糕,所以我无法将实际日志粘贴到这里。

有时当我启动我的 vertx 网络服务器并登录时,它完全没有问题。一段时间后,任何数据库请求(比如再次登录)都会return这个错误。有时这只是在启动时发生。

JDBCClient 是在服务器加载时初始化的,我觉得这个错误可能与它正在连接的 AWS 服务器有关,给它一个超时信号。在发出请求之前,有什么方法可以检查并重新初始化 JDBCClient 吗?还是有其他我不知道的问题?

有两个原因 RejectedExecutionException

  1. RejectedExecutionException 的原因之一是当我们试图 在我们关闭执行器后执行一个新任务。
  2. 另一种RejectedExecutionException的情况,出现在Executor时 不能再承担其职责范围内的任何任务。有时候是这样的 当达到其本地“内存”的限制时。

在您的情况下,此异常导致 JDBCClientImpl.java 的第 108 行,即 exec.execute()。这里 execExecutorService 的对象,它导致 RejectedExecutionException 因为任务无法提交执行,或者因为这个执行器已经关闭或者因为它的容量已经达到。

  1. 检查您是否正在 ResultSetStatementConnection 关闭 不管是不是。
  2. 检查您是否正在多次初始化 JDBCClientImpl 也可能导致这个异常。
  3. ThreadPoolExecutor 有一个 finalize() 方法关闭 执行人。鉴于我们没有保留对下属的引用 执行者,最终确定的可能性很大 导致关机。

您可以查看此 url for RejectedExecutionException and this JDBCCLientImpl.java,您可以在其中找到 getConnection() 方法源。