Если для каждого запроса 100 мс, то вам не нужен пул соединений.Если вам нужны запросы продолжительностью менее 20 мс, повторное использование соединений необходимо.
Если ваш драйвер поддерживает собственный пул соединений, я предлагаю вам использовать это (в случае, если он уже не делает этого для вас).Только если вам нужен больший контроль над тем, как соединения объединяются, вы можете использовать дополнительную библиотеку (я никогда ее не использовал)
Примечание: вам не нужно использовать пул для повторного использования соединений.
Один простой способ многократного использования соединений - это иметь одно постоянное соединение (в котором установлены соответствующие средства защиты потоков). Если ваши запросы нечасты, это может быть все, что вам нужно.
Если вы хотитечтобы иметь возможность выполнять запросы одновременно и иметь только несколько потоков, которые будут выполнять запросы, вы можете сохранить соединение в поле ThreadLocal.
Если вам нужно несколько соединений и у вас больше потоков, которые могут выполнить запрос, чем выхотите иметь в соединениях, используйте пул.
Для модели ThreadLocal вы можете сделать
public static final ThreadLocal<Connection> CONNECTION = new ThreadLocal<Connection>() {
public Connection initialValue() {
LOG.info(Thread.currentThread()+": created a connection.");
return createConnection();
}
};
Если вы хотите контролировать, как очищаются соединения.
private static final Map<Thread, Connection> connections = new ConcurrentHashMap();
public static final ThreadLocal<Connection> CONNECTION = new ThreadLocal<Connection>() {
public Connection initialValue() {
LOG.info(Thread.currentThread()+": created a connection.");
Connection conn = createConnection();
connections.put(Thread.currentThread(), conn);
return conn;
}
};
public static void cleanUp() {
for(Map.Entry<Thread, Connection> entry: connections.entrySet()) {
Thread t = entry.getKey();
if (!t.isAlive()) {
LOG.info(t+": closed a connection.");
connections.remove(t);
entry.getValue().close();
}
}
}
Если вас беспокоит получение разорванного соединения, вы можете переопределить get () ThreadLocal для проверки соединения перед возвратом.