在我的Spring boot(2.0.7 RELEASE)应用程序中,我无法在application.properites文件中手动设置/覆盖数据库连接的超时。我正在使用JPA,Hibernate,Tomcat连接池和Postgres。
我进行了深入研究,发现了非常相似的问题:
我问新问题的原因是,以上两个问题都没有公认的答案,也没有确定的可行解决方案。我尝试将每个建议的解决方案都包含在我的application.properties文件中,但没有成功。
[此外,如问题2所述:如果我在@Transactional批注中添加参数'timeout = someSeconds',则连接超时将如预期的那样,但是如果我尝试在application.properties中提取它,它将失败并且超时为默认时间。这里的问题是我希望所有连接不仅在事务中都在给定时间内超时。
我在application.properties中尝试过的事情(所需的超时时间是4秒):
我读过的材料:
我是否缺少一些财产?有谁知道为什么不能通过application.properties文件覆盖超时?
提前感谢。
至少要配置3个超时:
txManager.setDefaultTimeout(myDefaultValue);
查询超时(显然不需要@transactional),您已经做过,并且也解释了here
网络超时(请阅读此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