在我的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文件覆盖超时?
谢谢。
答案 0 :(得分:0)
至少要配置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
答案 1 :(得分:0)
取决于您的数据源,但是您可以尝试以下操作:
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