1.写了一个spring mvc定时器,定时在比如9.00的时候执行。
2.然后数据库采用oracle,采用druid连接池。
3.在执行一个sql操作后,执行完打印时间,五分钟之后的下一秒,就报java.sql.SQLRecoverableException: Io 异常: Software caused connection abort: recv failed
Caused by: java.net.SocketException: Software caused connection abort: recv failed
盲猜
是因为你执行sql语句之后并没有顺手关闭连接
而数据库端设置了登录超时时间5分钟
导致服务关闭连接时客户端报错
由于当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接造成的。解决方法是,在jdbc配置中加上:
Xml代码
<property name="validationQuery">
<value>select * from dual</value>
</property>
这样客户端在使用一个无效的连接时会先对该连接进行测试,如果发现该连接已经无效,则重新从连接池获取有效数据库连接来使用。