Java 冬眠+;PostgreSQL";“连接太多”;错误

Java 冬眠+;PostgreSQL";“连接太多”;错误,java,hibernate,postgresql,connection,pool,Java,Hibernate,Postgresql,Connection,Pool,我有一个应用程序,它在多个并发会话(超过1000个)中使用数据库。 在Postgres中,默认情况下,可用的最大连接数设置为100,我没有对此进行更改 Hibernate的最大连接池大小为20,但应用程序似乎忽略了这一点,并抛出“连接太多”错误 所以问题是,当只有100个会话可用时,如何处理1000多个会话? 有这样的队列或smth吗 Hibernate的最大连接池大小为20,但应用程序似乎忽略了这一点,并抛出“连接太多”错误 仔细检查您对Hibernate会话工厂的使用情况: 如果您的应用程

我有一个应用程序,它在多个并发会话(超过1000个)中使用数据库。 在Postgres中,默认情况下,可用的最大连接数设置为100,我没有对此进行更改

Hibernate的最大连接池大小为20,但应用程序似乎忽略了这一点,并抛出“连接太多”错误

所以问题是,当只有100个会话可用时,如何处理1000多个会话? 有这样的队列或smth吗

Hibernate的最大连接池大小为20,但应用程序似乎忽略了这一点,并抛出“连接太多”错误

仔细检查您对Hibernate会话工厂的使用情况:

  • 如果您的应用程序是web应用程序,请阅读此[1]
  • 如果您的应用程序是独立应用程序,请阅读此[2]
通常问题是Hibernate会话的错误使用

[1] [2]

因此,问题是当只有 有100美元吗?有这样的队列或smth吗


100是您可以打开的并发连接,通过这些连接您可以执行100多个操作:Hibernate只需为您管理队列。

我接受了[2]案例,并将
.openSession()
更改为
.getCurrentSession()
;。。等等,正如上面所描述的。但是没有效果。在应用程序中,每个会话同时从不同线程创建(1000个线程=1000个会话),并且
.getCurrentSession()
创建一个新会话,就像
.openSession()
一样。在这种情况下,ofc 1000sessions将遇到over db连接限制,并抛出错误。这就是为什么我要排队的原因。但Hibernate似乎不想为我处理这个问题:(我曾尝试打开会话一次并将线程池嵌套到该线程池中,但这似乎不是一个好主意,因为
Hibernate不支持嵌套事务
error您在那里使用了singleton吗?是的,我在那里使用了它。但现在我已通过使用c3p0连接池并将最大池大小设置为100来修复了一个错误。现在工作正常:))谢谢你的帮助