检查数据库连接是否正常【测试连接】
- DbUtil
/**
* @description:
* @author: Lucky
* @create: 2022-05-11 08:55
**/
@Slf4j
public class DbUtil {
/**
* 检查数据库连接是否正常
* <p>
* DbUtil.checkDbConfigToConnection
* https://stackoverflow.com/questions/1683949/connection-timeout-for-drivermanager-getconnection
*
* @param ds
* @return
*/
public static Boolean checkDbConfigToConnection(ProjectDs ds) {
return checkDbConfigToConnection(ds, null);
}
/**
* 检查数据库连接是否正常
* <p>
* DbUtil.checkDbConfigToConnection
* https://stackoverflow.com/questions/1683949/connection-timeout-for-drivermanager-getconnection
*
* @param ds
* @param dbDriver
* @return
*/
public static Boolean checkDbConfigToConnection(ProjectDs ds, String dbDriver) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Connection> future = executor.submit(new Callable<Connection>() {
@Override
public Connection call() throws Exception {
Connection con = DriverManager.getConnection(ds.getUrl(), ds.getUsername(), ds.getPassword());
return con;
}
});
Connection con = null;
try {
con = future.get(PubEnvUtil.getConfigIntDef(PubEnvUtil.CONNECTION_TIMEOUT,5), TimeUnit.SECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException ex) {
}
executor.shutdownNow();
if (con == null) {
//System.out.println("Could not establish connection");
throw new BizException(500, "数据库连接不正常", "数据库连接不正常");
} else {
//System.out.println("Connection established!");
try {
if (con != null) {
con.close();
}
} catch (SQLException e) {
throw new BizException(500, "数据库连接串错误", "连接串错误");
}
return Boolean.TRUE;
}
}
/**
* 检查数据库驱动是否连接正常
*
* @param ds
* @param dbDriver
* @return
*/
@Deprecated
public static Boolean checkDbConfigToDriver(ProjectDs ds, String dbDriver) {
Connection connection = null;
try {
Class.forName(dbDriver);
connection = DriverManager.getConnection(ds.getUrl(), ds.getUsername(), ds.getPassword());
} catch (SQLException | ClassNotFoundException e) {
log.error(ds.getDbType() + "数据源配置 {} , 获取数据库连接失败", "conf.getName()", e);
throw new BizException(500, "数据库连接失败", e.getMessage());
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
throw new BizException(500, "数据库连接串错误", "数据库连接串错误");
}
}
return Boolean.TRUE;
}
}
- ProjectDs
import lombok.Data;
/**
* @description:
* @author: Lucky
* @create: 2022-05-11 08:55
**/
@Data
public class ProjectDs implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 数据库
*/
private String database;
/**
* 账号
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 数据库类型
*/
private String dbType;
/**
* 地址
*/
private String url;
}