这个配置注释了,这个配置就是获得连接的超时时间,如果超过这个时间,会抛出SQLException异常。如果没有这个超时配置,获取不到连接就会一直等待连接。
获取不到连接意味着c3p0连接池中的连接全部耗尽,定时任务执行完后,并没有把连接还给连接池,每次定时任务都从连接池获取新的连接,直至连接池达到最大连接数。
问题解决:
spring的scheduling使用线程池来执行定时任务的,线程是不会销毁的,线程从连接池获取连接后,执行任务,定时任务执行完成后,线程没有销毁,连接也就没有返回连接池。下次再次执行任务时,又从连接池中获取新的连接。这样最终把连接池的连接都耗尽了。
解决方法:
1.在任务执行完成后,主动关闭连接。而不是等待连接池回收连接。
2.开启一个新线程执行任务,新线程执行完毕后,线程会销毁,连接也会关闭。
总结:
使用线程池中的线程执行数据库操作时,如果是从连接池中获取连接的话,一定要关闭连接,否则会出现线程不销毁,连接就一直被占着,最终把连接池的连接耗光的情况。