![](/img/trans.png)
[英]How can multiple Threads write to the database by using the same connection in 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 类型Connection
、 Statement
、 ResultSet
等通常不是线程安全的1 。 您不应该尝试在多个线程中使用实例。
如果您想避免打开多个连接,通常的方法是使用 JDBC 连接池来管理连接。 当一个线程需要与数据库对话时,它会从池中获得一个连接。 当它完成与数据库的对话后,它会将其释放回池中。
在 PostgreSQL / Hikari 案例中:
getConnection()
调用是线程安全的,但是当由多个线程共享时,我找不到任何明确讨论连接对象的线程安全性的内容。1 - 我已经看到它说符合规范的 JDBC 驱动程序应该是线程安全的,但是我看不到 JDBC 规范实际上要求这样做的地方。 但即使假设它确实在某处说,共享连接的线程也需要非常小心地协调以避免诸如一个线程导致另一个线程的结果集“自发”关闭之类的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.