@AdaMorgan

Как сделать обработку запросов в разных соединениях базы данных?

Я использую: JDBC, Apache Commons DBCP2

Я хочу сделать реализацию отправки и получения результата запроса в базу данных PostgreSQL в разных потоках, и для каждого потока будет отдельное соединение (Мой тариф хостинга базы данных поддерживает 5 соединений), но при попытке обработать, группу запросов, используется только одно соединение (я хочу задействовать все 5) и я никак не могу понять причину и как я могу задействовать все возможные соединения

public static BasicDataSource getConnection(SQL sql, BasicDataSource init) {
        return new SessionFactory(api, init)
                .setUrl()
                .setUsername()
                .setPassword()
                .setMaxIdle(5)
                .setInitialSize(5)
                .build();
    }
    public Connection getConnection() {
        if (this.sessions.isEmpty()) {
            this.sessions.put(this.property.getUrl(), getConnection());
        }

        return this.sessions.get(this.api.getProperty().getUrl());
    }


public class SessionCallable<K, V> implements Callable<String> {
    private final SQL api;
    private final K query;
    private final V parameters;

    public SessionCallable(SQL api, K query) {
        this.api = api;
        this.query = query;
    }

    @Override
    public String call() {
        return result(preparedStatement(this.query))
    }

    private PreparedStatement preparedStatement(String query) throws SQLException {
        return this.api.getConnection().prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    }
}


private <K, V> Collection<String> collect(@NotNull DataObject<K, V> data) throws InterruptedException {
        return this.api.getRateLimitPool().invokeAll(toCollection(data)).stream()
                .map(this::get)
                .toList();
    }

    private <K, V> Collection<SessionCallable<K,V>> toCollection(@NotNull DataObject<K, V> data) {
        return data.thenApply((key, value) -> new SessionCallable<>(this.api, key, value)).toList();
    }
  • Вопрос задан
  • 30 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы