簡體   English   中英

如何在 Spring Boot 應用程序中配置自定義數據庫連接超時?

[英]How to configure custom database connection timeout in Spring Boot application?

在我的 Spring boot(2.0.7 RELEASE) 應用程序中,我無法手動設置/覆蓋 application.properites 文件中數據庫連接的超時。 我正在使用 JPA、Hibernate、Tomcat 連接池和 Postgres。

我已經徹底研究並發現了非常相似的問題:

我提出新問題的原因是因為上述問題都沒有公認的答案,也沒有確認的工作解決方案。 我嘗試在我的 application.properties 文件中包含每個建議的解決方案,但沒有成功。

此外,如問題 2 中所述:如果我在 @Transactional 注釋中添加參數“timeout = someSeconds”,連接將按預期超時,但如果我嘗試在 application.properties 中提取它,它會失敗並超時默認時間。 這里的問題是我希望所有連接在給定時間內超時,而不僅僅是事務。

我在 application.properties 中嘗試過的事情(所需的超時時間為 4 秒):

  • spring.jpa.properties.javax.persistence.query.timeout=4000
  • spring.jdbc.template.query-timeout=4
  • spring.transaction.defaultTimeout=4
  • spring.datasource.tomcat.validation-query-timeout=4

我讀過的材料:

我錯過了一些財產嗎? 有誰知道為什么不能通過 application.properties 文件覆蓋超時?

提前致謝。

至少有 3 個超時需要配置:

  1. 事務超時,您已經這樣做了。 我在 transactionManager bean 中聲明了我的:
txManager.setDefaultTimeout(myDefaultValue);
  1. 查詢超時(顯然不需要@transactional),您已經這樣做並在此處進行了解釋

  2. 網絡超時(閱讀這篇優秀文章)。

就我而言,我使用的是 Oracle,我的 bean 配置如下:

    @Bean
    public HikariDataSource dataSource() {
        
        HikariDataSource ds = new HikariDataSource();
        ds.setDriverClassName(springDatasourceDriverClassName);
        ds.setJdbcUrl(springDatasourceUrl);
        ds.setUsername(springDatasourceUsername);
        ds.setPassword(springDatasourcePassword);
        ds.setDataSourceProperties(oracleProperties());
        
        return ds;
    }
    
    Properties oracleProperties() {
        Properties properties = new Properties();
        
        properties.put("oracle.net.CONNECT_TIMEOUT", 10000);
        properties.put("oracle.net.READ_TIMEOUT", 10000);
        properties.put("oracle.jdbc.ReadTimeout", 10000);

        return properties;
    }

如果您不想為 DataSource 配置 bean(大多數人會這樣做),您可以在 application.properties 中配置網絡超時屬性:

spring.datasource.hikari.data-source-properties.oracle.net.CONNECT_TIMEOUT=10000
spring.datasource.hikari.data-source-properties.oracle.net.READ_TIMEOUT=10000
spring.datasource.hikari.data-source-properties.oracle.jdbc.ReadTimeout=10000

取決於你的數據源,但你可以試試這個:

spring.datasource.hikari.max-lifetime=1000
spring.datasource.hikari.connection-timeout=1000
spring.datasource.hikari.validation-timeout=1000
spring.datasource.hikari.maximum-pool-size=10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM