如何在Spring Boot应用程序中配置自定义数据库连接超时?

问题描述 投票:4回答:1

在我的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文件覆盖超时?

提前感谢。

java spring spring-boot jdbc
1个回答
0
投票

至少要配置3个超时:

  1. 交易超时,您已经这样做了。我在transactionManager bean中声明了我的:
txManager.setDefaultTimeout(myDefaultValue);
  1. 查询超时(显然不需要@transactional),您已经做过,并且也解释了here

  2. 网络超时(请阅读此excellent article)。

就我而言,我正在使用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
© www.soinside.com 2019 - 2024. All rights reserved.