著名的坑:mysql数据库本身能够设置连接超时时间wait_timeout,如果连接池的连接的最大空闲时间大于这个阈值,则连接可能已经被因数据库断掉而失效了,但该连接在池中还能够被使用。此时使用此连接时就会报错。对于这种情况有三种解决方式:
- 设置最大空闲时间小于数据库的连接超时时间,在数据库连接超时之前该连接就能够被连接池回收;
- 使用空闲连接检测,有些连接池会有testOnBorrow或者testOnReturn配置,在使用或者放回连接时检测连接时候有效。
- keep alive机制,可以设置一个无意义的查询,比如SELECT 1,每过一段时间执行查询保持连接有效,这样做会损失一定性能。