我想在死锁的情况下重试MySql查询,如果我可以简单地重试,将会删除它。
我使用apache tomcat jdbc池库进行mysql连接池,它有JdbcInterceptor对象的概念,可以附加到现有的Connection对象。我想知道如何使用这些拦截器进行查询重试。我怎么知道查询是否抛出异常而我应该重试?
我正在考虑做这样的事情,但我很难找到正确的重试逻辑:
public class JdbQueryRetryInterceptor extends JdbcInterceptor {
private final static Logger logger = LoggerFactory
.getLogger(JdbQueryRetryInterceptor.class);
@Override
public void reset(ConnectionPool parent, PooledConnection con) {
}
}
我在池属性中添加了这个拦截器:
p.setJdbcInterceptors("com.test.mysql.JdbQueryRetryInterceptor");
我不确定它是否可以在拦截器级别完成,但是因为tomcat文档说可以这样做所以我想采用这种方法。
http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
能够配置自定义拦截器。这允许您编写自定义拦截器以增强功能。您可以使用 拦截器收集查询统计信息,缓存会话状态,重新连接 失败时的连接,重试查询,缓存查询结果和 等等。你的选择是无止境的,拦截器是动态的,而不是 绑定到java.sql / javax.sql接口的JDK版本。