Tomcat dbcp удалить оставленную проблему
Кто-нибудь может объяснить, как правильно использовать свойство removeAbandoned? Проблема в том, что у нас есть сервисный метод, который выполняется в транзакции (применяется @Transactional). Тело может быть чем-то вроде 1000 операторов выбора, за которыми следует, например, 1000 вставок. Свойство removeAbandoned было установлено равным 60 секундам. Теперь, если время выполнения 1000 операторов вставки превышает 60 секунд, генерируется исключение "Соединение уже закрыто" для следующего оператора БД. Почему это происходит и как это преодолеть? Если я удаляю свойство removeAbandoned, все работает хорошо. Вот мой конфиг dbcp.
db.initialSize=5
db.maxActive=150
db.minIdle=0
db.maxIdle=8
db.defaultAutoCommit=false
db.defaultTransactionIsolation=-1
db.maxWaitMillis=3000
db.timeBetweenEvictionRunMillis=1000
db.minEvictableIdleTimeMillis=1000
db.testOnBorrow=true
db.testOnReturn=false
db.testWhileIdle=false
db.removeAbandoned=true
db.removeAbandonedTimeout=60
db.poolPreparedStatements=true
db.validationQuery=select 1
Используя эти свойства, мы создаем источник данных. Пожалуйста, поправьте меня, если я делаю что-то не так здесь. Я предполагаю, что когда бы ни вызывался этот сервис, он открывает соединение и выполняет операторы db, но пытается использовать то же соединение после removeAbandonedTimeout?
1 ответ
Это нормальное поведение removeAbondoned
проверьте здесь. Вы должны проверить свои требования и ограничения и настроить соответственно. Если выполнение занимает столько времени, и это правильная реализация, настройте конфигурацию (увеличьте время ожидания отмены или полностью удалите его).
Это может быть распространено, например, для ночных заданий и процессов переноса данных в автономном режиме. Если есть взаимодействие с пользователем, я думаю, что вам нужно учитывать скорость отклика и, следовательно, изменить реализацию сервиса. Затем вам может понадобиться разделить его на разные службы или настроить SQL внутри или удалить некоторые ненужные вызовы, но сохранить настройку тайм-аута.