Пул соединения JDBC, не вновь открывший соединения в Tomcat

Хотите получить последние несколько строк файла журнала?

tail /var/log/syslog

Хотите следить за файлом журнала для того, когда он изменяется?

tail -f /var/log/syslog

Хотите быстро перечитать по файлу от запуска?

more /var/log/syslog

Хотите быстро найти, содержит ли файл некоторый текст?

grep "find this text" /var/log/syslog
8
задан halfer 3 March 2019 в 23:00
поделиться

4 ответа

Try adding a validation query attribute. This should have the effect of automatically closing and re-opening the connection after a timeout like this:

validationQuery="SELECT 1"
7
ответ дан 5 December 2019 в 12:59
поделиться

Во-первых, избавьтесь от свойства autoReconnect . Вам это не нужно с пулом соединений, и это может вызвать проблемы.

Во-вторых, убедитесь, что вы закрыли все ресурсы ( Соединение , Заявление и ResultSet ) в вашем JDBC-коде в блоке finally .

Я не уверен, применимо ли это к вашему случаю, но среди начинающих распространено заблуждение, что они, кажется, думают, что вы не нужно закрывать эти ресурсы в случае соединений в пуле. Это неправда. Объединенное соединение - это оболочка (декоратор) вокруг соединения, которое имеет слегка измененный метод close () , который примерно выглядит как

public void close() throws SQLException {
    if (this.connection is still active) {
        do not close this.connection, but just return it to pool for reuse;
    } else {
        actually invoke this.connection.close();
    }
}

Другими словами, их закрытие освобождает объединенное соединение, чтобы его можно было снова поместить в пул для повторного использования в будущем. Если вы установите соединения, не закрывая их, то в пуле рано или поздно кончатся соединения.

5
ответ дан 5 December 2019 в 12:59
поделиться

Поскольку это срочно и для производства, я предлагаю вам взглянуть на достойный пул соединений, такой как c3p0 . Он более устойчивый и надежный и лучше справляется с таймаутами.

1
ответ дан 5 December 2019 в 12:59
поделиться

With your configuration, it's not supposed to create another connection if it's idle. Try to add

  minIdle="3"

With this setting, DBCP will maintain 3 connections all time.

We see exactly the same behavior with one of lightly used servers. Due to the default connection timeout of 8 hours, we see no connections when we come in the morning. That's what we expected. However, sometimes we see stale connection and the first request will fail. To get around this issue, you need add following attributes,

testWhileIdle="true",
timeBetweenEvictionRunsMillis="60000"
0
ответ дан 5 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

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