【问题标题】:Connect to many databases in different servers连接到不同服务器中的多个数据库
【发布时间】:2019-11-28 15:44:30
【问题描述】:

也许以前有人问过这个问题,但我还没找到。

我的问题很简单,我想验证与很多数据库的连接。我在 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());
  }

【问题讨论】:

    标签: java database database-connection datasource multi-database-connections


    【解决方案1】:

    建立连接是expensive operation,在服务器端需要花费大量时间。您正在运行一个循环,该循环很可能保持空闲等待下一个连接。您可以尝试使用thread pool executor 并行发送多个连接。

    附带说明一下,您可能还想使用try-with-resources 语句来自动关闭结果集、语句和连接。

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2017-11-22
      相关资源
      最近更新 更多