首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot JPA连接验证不起作用

Spring Boot JPA连接验证不起作用
EN

Stack Overflow用户
提问于 2014-06-26 02:29:01
回答 1查看 8.2K关注 0票数 6

我目前正在调试一个使用spring boot(1.1.2版本)构建的小应用程序。如果连接丢失(由于生产中的wait_timeout或开发中的终止连接),我在重新连接到数据库时遇到了问题。我目前使用的配置参数(application.properties)如下:

代码语言:javascript
复制
spring.datasource.url=jdbc:mysql://localhost:3306/test?autoreconnect=true
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.test-on-borrow=true
spring.datasource.test-while-idle=true
spring.datasource.validation-query=SELECT 1;
spring.datasource.initial-size=2
... username+pw

spring.jpa.generate-ddl=true
spring.jpa.show-sql=true

这将产生以下数据源:

代码语言:javascript
复制
org.apache.tomcat.jdbc.pool.DataSource@73e369e5{ConnectionPool[
defaultAutoCommit=null;
defaultReadOnly=null;
defaultTransactionIsolation=-1;
defaultCatalog=null;
driverClassName=com.mysql.jdbc.Driver;
maxActive=100;
maxIdle=100;
minIdle=10;
initialSize=2;
maxWait=30000;
testOnBorrow=true;
testOnReturn=false;
timeBetweenEvictionRunsMillis=5000;
numTestsPerEvictionRun=0;
minEvictableIdleTimeMillis=60000;
testWhileIdle=true;
testOnConnect=false;
password=********;
url=jdbc:mysql://localhost:3306/test?autoreconnect=true;
username=test;
validationQuery=SELECT 1;
;
validationQueryTimeout=-1;
validatorClassName=null;
validationInterval=30000;
accessToUnderlyingConnectionAllowed=true;
removeAbandoned=false;
removeAbandonedTimeout=60;
logAbandoned=false;
connectionProperties=null;
initSQL=null;
jdbcInterceptors=null;
jmxEnabled=true;
fairQueue=true;
useEquals=true;
abandonWhenPercentageFull=0;
maxAge=0;
useLock=false;
dataSource=null;
dataSourceJNDI=null;
suspectTimeout=0;
alternateUsernameAllowed=false;
commitOnReturn=false;
rollbackOnReturn=false;
useDisposableConnectionFacade=true;
logValidationErrors=false;
propagateInterruptState=false;
ignoreExceptionOnPreLoad=false;
}

我现在的问题是,当连接丢失时,需要相当长的时间才能重新建立连接。同时,用户得到一个空页面,并在服务器端抛出异常。根据我的理解,testOnBorrow应该在每次使用之前测试连接,并且每30秒执行一次testWhileIdle。但事实显然并非如此。当我查看mysql时,似乎每隔35秒就会发生一次事情,睡眠时间会重置,但我在应用程序日志中看不到任何查询。验证查询似乎完全丢失了。

我通过spring data的存储库访问数据库。

我目前还没有进一步的想法去尝试什么。

EN

回答 1

Stack Overflow用户

发布于 2015-03-17 00:46:00

尝试切换到HikariCP而不是tomcat作为您的连接池,因为它似乎可以处理超时/连接丢失a lot better。如果HikariCP出现在类路径中,而tomcat-jdbc不存在,Spring Boot将自动配置它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24415947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档