也许以前有人问过这个问题,但我还没有找到。
我的问题很简单,我想验证与许多数据库的连接。我用Java创建了一个流程(我正在使用Spring),该流程使用从查询中获取的一些数据创建数据源连接。我只想知道是否有更好的方法或更快的方法。我的过程花了很多时间来验证整个连接(5K附近)。
这是我的代码的样子
public void validateConnections() throws IllegalBlockSizeException, BadPaddingException {
BasicDataSource dataSource;
List<Element> elements = dataToCreateDatasourcesRepository.getAllDatas();
for(Element element : elements) {
dataSource = new BasicDataSource();
dataSource.setDriverClassName(Constants.DRIVER_CLASS_NAME_PROP);
dataSource.setUrl(getConnectionUrl(element.getElementNbr(), element.getCode()));
dataSource.setUsername(userName);
dataSource.setPassword(EncryptionAlgorithm.decryptFromHex(password));
try {
Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
if(rs == null || !rs.next()) {
LOG
.info(
"Connection for element [" + element.getElementNbr() + "]." + element.getCode() + " UNSUCCESSFULY ");
}
else {
LOG.info("Connection for element [" + element.getElementNbr() + "]." + element.getCode() + " SUCCESSFULY ");
}
}
catch(Exception e) {
LOG.info("Connection for element [" + element.getElementNbr() + "]." + element.getCode() + " UNSUCCESSFULY ");
LOG.error(e);
}
}
}
public String getConnectionUrl(String elementNbr, String code) {
return String
.format(
dbUrl,
PREFIX.concat(elementNbr.toString()),
code.concat(Constants.HOSTNAME),
PREFIX.concat(elementNbr.toString()),
code.toLowerCase());
}
答案 0 :(得分:0)
建立连接是expensive operation,在服务器端花费大量时间。您正在运行一个循环,很可能会保持空闲状态等待下一个连接。您可以尝试使用thread pool executor并行发送许多连接。
作为旁注,您可能还想使用try-with-resources语句自动关闭结果集,语句和连接。