微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

多个线程通过使用Java中的相同连接读取数据库中的同一表?

如何解决多个线程通过使用Java中的相同连接读取数据库中的同一表?

我定义了三个事务,其中对传递的不同参数进行选择操作和选择操作。我尝试同时调用方法。我得到一个错误

o.h.engine.jdbc.spi.sqlExceptionHelper   : sql Error: 0,sqlState: null
    Aug 25,2020 @ 12:16:39.000 2020-08-25 06:46:39.388 ERROR 1 --- [o-9003-exec-630] o.h.engine.jdbc.spi.sqlExceptionHelper   : Hikari - Connection is not available,request timed out after 60000ms.

有时

org.postgresql.util.PsqlException: FATAL: remaining connection slots are reserved for non-replication superuser connections

我是Java新手。请指导我解决此问题。我是否需要编写多线程访问资源或配置问题?

hikari:
                    poolName: Hikari
                    autoCommit: false
                    minimumIdle: 5
                    connectionTimeout: 60000
                    maximumPoolSize: 80
                    idleTimeout: 60000
                    maxLifetime: 240000
                    leakDetectionThreshold: 300000

解决方法

通过使用Java中的相同连接将多个线程读取到数据库中的同一表?

通常来说这是行不通的。 JDBC API类型ConnectionStatementResultSet等通常不是线程安全的 1 。您不应尝试在多个线程的实例上使用。

如果要避免打开多个连接,通常的方法是使用JDBC连接池来管理连接。当线程需要与数据库对话时,它将从池中获得连接。与数据库通话结束后,它将释放回池中。

在PostgreSQL / Hikari情况下:


1-我已经看到它指出符合规范的JDBC驱动程序应该是线程安全的,但是我看不出JDBC规范实际上在何处要求这样做。但是,即使假设确实在某个地方说过,共享连接的线程也需要非常仔细地进行协调,以避免某个线程导致另一线程的结果集“自发”关闭的情况。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。