最近做项目,数据库用的百度的RDS MYSQL,非常坑爹,十次连接至少三次是连不上的,而且,连不上一点提示都没有,就那么卡着,等十几分钟都没有回应。一直找不到比较合适的解决方法。百度上搜索到的内容都与这个问题无关,都是已经建好的连接超时,但是没有提到怎么才能处理建立连接的时候超时等上几个小时没回应这种坑爹问题。这次就做了一个连接拨号器,是在普通的数据库连接器的基础上改进的,原理也很简单。上代码。
代码的主体思路就是用三个内部类线程同时进行拨号,拨号成功就把连接对象放进arraylist。getconnection()方法执行的时候就检测arraylist是不是空的,如果是空的,就启动进行连接的线程,如果List里面有料就把连接对象提出来用。另外,数据库连接的时候,connection timeout的时间有时候非常长,而且完全就没有回应,这里直接让它只能等1000ms,超过没有连上直接暴力把连接线程更新掉重连。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import com.mysql.jdbc.Statement;
public class DatabaseConnection
{
private static final String DBDRIVER = "com.mysql