Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Max connection在大量空闲连接时异常崩溃_Hibernate_Spring Boot_Jpa_Postgresql 9.4 - Fatal编程技术网

Hibernate Max connection在大量空闲连接时异常崩溃

Hibernate Max connection在大量空闲连接时异常崩溃,hibernate,spring-boot,jpa,postgresql-9.4,Hibernate,Spring Boot,Jpa,Postgresql 9.4,我已经检查了应该是97,因为我的最大连接是100,superuser\u reserved\u连接默认为3 我正在使用和管理数据库操作 我正在使用@Autowired连接存储库,并将其传递到数百个线程中,这些线程将从数据库进行搜索并保存到数据库 连接异常提示我,但当我通过 问题 为什么连接如此之高,而空闲几乎占据了整个连接 如果每个操作都在Hibernate中,我将创建一个连接?有没有官方文件来详细说明这个设计 在冬眠状态下,有什么方法可以释放空闲时间吗 或者实际上我应该去另一个地方而不是冬眠

我已经检查了应该是97,因为我的最大连接是100,
superuser\u reserved\u连接
默认为3

我正在使用和管理数据库操作

我正在使用
@Autowired
连接存储库,并将其传递到数百个线程中,这些线程将从数据库进行搜索并保存到数据库

连接异常提示我,但当我通过

问题
  • 为什么连接如此之高,而空闲几乎占据了整个连接
  • 如果每个操作都在Hibernate中,我将创建一个连接?有没有官方文件来详细说明这个设计
  • 在冬眠状态下,有什么方法可以释放空闲时间吗
  • 或者实际上我应该去另一个地方而不是冬眠
  • 更新 我通过在java代码中缓存数据来解决这个问题,以避免频繁的搜索和保存,但是上面的问题仍然存在


    任何帮助都将不胜感激;)

    使用JPA/Hibernate时,您必须设置一个
    数据源
    ,这通常是一个使用连接池的实现,这样它就不必一直重新创建连接。相反,将采用连接池中的现有连接

    Spring提供并支持几种实现,如HikariCP、DBCP、Tomcat等。默认情况下,Spring boot 1.x使用Tomcat连接池,而Spring boot 2.x使用

    您可以通过设置
    minimumIdle
    属性来配置空闲连接的最小数量。默认情况下,这与
    maximumPoolSize
    相同,后者默认为10。这意味着Hikari在默认情况下将尝试保持10个连接,不管是否空闲

    在Spring引导中,您可以使用
    Spring.datasource.hikari.*
    前缀配置HIKARIP属性,例如:

    spring.datasource.hikari.minimumIdle=10
    spring.datasource.hikari.maximumPoolSize=10
    
    引述:

    此属性控制HikariCP尝试在池中维护的最小空闲连接数。如果空闲连接低于此值,并且池中的总连接数小于
    maximumPoolSize
    ,HikariCP将尽最大努力快速高效地添加其他连接。但是,为了获得最佳性能和响应峰值需求,我们建议不要设置此值,而是允许HikariCP充当固定大小的连接池。默认值:与
    maximumPoolSize

    如您所见,建议不要更改此行为,因此,如果您的应用程序未使用,则使用HikariCP查看大量空闲连接是非常正常的。但是,除非另有配置,否则每个应用程序最多应具有10个连接。他们还建议将最大池大小保持在尽可能低的水平,如本文所述


    此外,您可以通过配置
    idleTimeout
    设置来配置空闲时连接保持的时间。

    使用JPA/Hibernate时,您必须设置
    数据源
    ,这通常是一个使用连接池的实现,这样它就不必一直重新创建连接。相反,将采用连接池中的现有连接

    Spring提供并支持几种实现,如HikariCP、DBCP、Tomcat等。默认情况下,Spring boot 1.x使用Tomcat连接池,而Spring boot 2.x使用

    您可以通过设置
    minimumIdle
    属性来配置空闲连接的最小数量。默认情况下,这与
    maximumPoolSize
    相同,后者默认为10。这意味着Hikari在默认情况下将尝试保持10个连接,不管是否空闲

    在Spring引导中,您可以使用
    Spring.datasource.hikari.*
    前缀配置HIKARIP属性,例如:

    spring.datasource.hikari.minimumIdle=10
    spring.datasource.hikari.maximumPoolSize=10
    
    引述:

    此属性控制HikariCP尝试在池中维护的最小空闲连接数。如果空闲连接低于此值,并且池中的总连接数小于
    maximumPoolSize
    ,HikariCP将尽最大努力快速高效地添加其他连接。但是,为了获得最佳性能和响应峰值需求,我们建议不要设置此值,而是允许HikariCP充当固定大小的连接池。默认值:与
    maximumPoolSize

    如您所见,建议不要更改此行为,因此,如果您的应用程序未使用,则使用HikariCP查看大量空闲连接是非常正常的。但是,除非另有配置,否则每个应用程序最多应具有10个连接。他们还建议将最大池大小保持在尽可能低的水平,如本文所述


    此外,您可以通过配置
    idleTimeout
    设置来配置空闲时保持连接的时间。

    在@g00glen00b的帮助下,我检查了Spring引导依赖项,发现Spring引导实际使用了该依赖项

    tomcat使用了一些属性来控制允许多少空闲连接以及它们在被逐出之前可以停留多长时间。它的默认值是
    maxActive:100
    ,它直接解释了一切

    在SpringBoot中,您可以按如下方式管理此属性

    但是正如@g00glen00b所提到的,直接管理这个值可能会损害性能,这可能不好。应根据系统本身,以明确的意图谨慎使用


    在我的例子中,我没有触及它们,我重构了我的java代码来缓存数据,以减少java端的连接。

    在@g00glen00b的帮助下,我检查了Spring引导依赖项,发现Spring引导实际使用了它

    那儿