Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Java 如何在Spring Boot应用程序中配置自定义数据库连接超时?_Java_Spring_Spring Boot_Jdbc - Fatal编程技术网

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

Java 如何在Spring Boot应用程序中配置自定义数据库连接超时?,java,spring,spring-boot,jdbc,Java,Spring,Spring Boot,Jdbc,在我的Spring boot(2.0.7版本)应用程序中,我无法手动设置/覆盖application.properites文件中数据库连接的超时。我正在使用JPA、Hibernate、Tomcat连接池和Postgres 我进行了彻底的研究,发现了非常相似的问题: 我之所以提出新问题,是因为上述问题都没有公认的答案,也没有确定的工作解决方案。我尝试在application.properties文件中包含每个建议的解决方案,但没有成功 此外,如问题2所述:如果我在@Transactiona

在我的Spring boot(2.0.7版本)应用程序中,我无法手动设置/覆盖application.properites文件中数据库连接的超时。我正在使用JPA、Hibernate、Tomcat连接池和Postgres

我进行了彻底的研究,发现了非常相似的问题:

我之所以提出新问题,是因为上述问题都没有公认的答案,也没有确定的工作解决方案。我尝试在application.properties文件中包含每个建议的解决方案,但没有成功

此外,如问题2所述:如果我在@Transactional注释中添加参数'timeout=Somess',则连接超时将如预期的那样,但如果我尝试在application.properties中提取它,则会失败,并超时默认时间。这里的问题是,我希望所有连接在给定时间内超时,而不仅仅是事务

我在application.properties中尝试过的内容(所需超时为4秒):

  • spring.jpa.properties.javax.persistence.query.timeout=4000
  • spring.jdbc.template.query超时=4
  • spring.transaction.defaultTimeout=4
  • spring.datasource.tomcat.validation查询超时=4
我读过的材料:

我丢了什么东西吗?有人知道为什么不能通过application.properties文件覆盖超时吗


提前感谢。

至少有3个超时需要配置:

  • 事务超时,您已经这样做了。我在transactionManager bean中声明了我的:
  • 查询超时(显然不需要@transactional),您已经这样做了,并且已经解释过了

  • 网络超时(请阅读此内容)

  • 就我而言,我使用的是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;
        }
    
    如果不想为数据源配置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
    

    根据Spring 2.0.7 properties(),属性键是Spring.transaction.default-timeout,而不是Spring.transaction.defaultTimeout。请尝试并告知我们。感谢您的建议。不幸的是,结果是一样的——连接没有在指定的时间内超时。此外,我正在试图找到一个解决方案,它包含所有连接,而不仅仅是事务。您找到解决方案了吗?在这里面临同样的问题…不幸的是没有。我没有发现任何新的东西。
    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