【问题标题】:Default HikariCP connection pool starting Spring Boot application启动 Spring Boot 应用程序的默认 HikariCP 连接池
【发布时间】:2019-12-16 05:23:44
【问题描述】:

我在我的 pom.xml 依赖项中使用版本:2.1.6.RELEASE 形式的 Spring Boot。 为了连接到我的数据库,我在 application.properties 中添加了以下内容:

spring.datasource.url= jdbc:postgresql://
spring.datasource.username=
spring.datasource.password=

当检查 postgresql 中的连接数量时:

SELECT * FROM pg_stat_activity;

我看到每次启动应用程序时都会建立 10 个连接。他们几乎都有相同的查询:

SET application_name = 'PostgreSQL JDBC Driver'

有没有办法阻止应用程序建立这么多的连接? 我应该进行自己的池配置吗? 我的 Java 应用程序中的哪些资源会初始化这些连接?

我唯一能想到的是我使用@Autowired 注释创建EntityManager,EntityManager 来自:

javax.persistence.EntityManager;

但我读到您应该只在使用 EntityManagerFactory 时关闭由此建立的连接。注释应该关闭连接。

如果您需要更多信息,我可以编辑我的帖子

【问题讨论】:

    标签: java spring-boot jdbc hikaricp connection-leaks


    【解决方案1】:

    这不是连接泄漏,而是所需的行为。 Spring Boot Data 使用 HikariCP 作为连接池。

    您可以将最大池大小配置为属性。例如:

    spring.datasource.hikari.maximum-pool-size=5
    

    【讨论】:

    • 我可以设置为 1 吗?为什么默认需要 10 个连接?降低这个数量会有问题吗?
    • 这没有意义。为什么你认为 10 个连接很多?
    • 每个线程是否使用不同的连接?有 10 个连接有什么意义?
    • 原因是性能。是的,每个想要访问数据库的线程都将分配一个连接。 HikariCP 处理连接的速度非常快。池的大小取决于您的应用程序将拥有的并发用户数。
    • 非常感谢您的解释
    【解决方案2】:

    HikariCP默认开启10个空闲连接,

    默认值:10

    您可以覆盖不太推荐的minimumIdle

    HikariCP 将尽最大努力快速有效地添加额外的连接。但是,为了获得最大性能和对峰值需求的响应,我们建议不要设置此值,而是允许 HikariCP 充当固定大小的连接池。默认值:与 maximumPoolSize 相同

    或者maximumPoolSize,但是会影响连接池的最大大小

    此属性控制池允许达到的最大大小,包括空闲和使用中的连接。

    【讨论】:

      【解决方案3】:

      HikariCP 默认最多有 10 个连接。

      您可以像这样配置最大池大小:

      spring.datasource.hikari.maximum-pool-size=5
      

      启用跟踪日志:

      logging.level.com.zaxxer.hikari.HikariConfig=DEBUG
      logging.level.com.zaxxer.hikari=TRACE
      

      【讨论】:

        猜你喜欢
        • 2019-08-05
        • 2019-01-27
        • 2016-05-28
        • 1970-01-01
        • 2019-06-07
        • 1970-01-01
        • 2016-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多