繁体   English   中英

java - 通过在java中使用相同的连接,多个线程读取到数据库中的同一个表?

[英]multiple Threads read to the same table in database by using the same connection in 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 规范实际上要求这样做的地方。 但即使假设它确实在某处说,共享连接的线程也需要非常小心地协调以避免诸如一个线程导致另一个线程的结果集“自发”关闭之类的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM