powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Закрывается соединение с БД при долгом запросе
7 сообщений из 7, страница 1 из 1
Закрывается соединение с БД при долгом запросе
    #39575051
Pavlo7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго!
Подскажите, пожалуйста, в чем может быть проблема.
Пишу rest-сервис на spring boot (tomcat), который подключается к 2-м базам Postgres, из одной только читает, во второй еще и меняет данные.
При вызове функции в БД, которая выполняет достаточно долгий запрос (> 30 мин), и меняет данные,
происходит ошибка при выходе из функции:
org.springframework.transaction.TransactionSystemException: Could not commit JDBC transaction; nest
ed exception is java.sql.SQLException: Connection has already been closed


Соединения настраиваются в config.java следующим образом:
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties("spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}

@Bean(name = "datasourceForUpdate")
@ConfigurationProperties("spring.datasourceForUpdate")
public DataSource datasourceForUpdate() {
return DataSourceBuilder.create().build();
}

В классе Dao имеется привязка шаблона к соединению:
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private JdbcTemplate jdbcTemplateForUpdate;

Метод, в котором выполняется вызов хранимой:
@Transactional
public String findObjs(String guid) {
SimpleJdbcCall call = new SimpleJdbcCall(datasourceForUpdate);
call.withSchemaName(schemeName);
call.withFunctionName("find_objs");
MapSqlParameterSource in = new MapSqlParameterSource();
in.addValue("in_guid", guid);
String res = call.executeFunction(String.class, in);
return res;
}

В файле настроек вот такие параметры (для второго соединения аналогично, только ip другой):

spring.datasourceForUpdate.platform=postgres
spring.datasourceForUpdate.driverClassName=org.postgresql.Driver
spring.datasourceForUpdate.url=jdbc:postgresql:192.168.20.30:5432/test?autoReconnect=true
spring.datasourceForUpdate.username=test
spring.datasourceForUpdate.password=test
spring.datasourceForUpdate.test-while-idle=true
spring.datasourceForUpdate.time-between-eviction-runs-millis=6000
# сбросить соединение если нет активности
spring.datasourceForUpdate.remove-abandoned=true
# время в СЕКУНДАХ
spring.datasourceForUpdate.remove-abandoned-timeout=36000
#spring.datasourceForUpdate.defaultAutoCommit=false
spring.datasourceForUpdate.validation-query=SELECT 1;
spring.datasourceForUpdate.validation-interval=30000

Параметры уже менял и так и сяк, отключал и включал remove-abandoned, менял значения таймаутов. Не помогает!
(Если объект поиска таков, что запрос работает менее 30 мин, то все срабатывает без ошибок)
...
Рейтинг: 0 / 0
Закрывается соединение с БД при долгом запросе
    #39575056
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavlo7,
Ну, 30 мин ведь действительно многовато.
...
Рейтинг: 0 / 0
Закрывается соединение с БД при долгом запросе
    #39575063
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, в настройках Постгреса посмотреть? Есть там такой параметр.
...
Рейтинг: 0 / 0
Закрывается соединение с БД при долгом запросе
    #39575080
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavlo7,

Значение интервала бездействия в Spring Session по умолчанию равно 30 минутам.

см.
- DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS
- @EnableJdbcHttpSession
- JdbcHttpSessionConfiguration
...
Рейтинг: 0 / 0
Закрывается соединение с БД при долгом запросе
    #39575086
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И у клиента свой тамаут.
...
Рейтинг: 0 / 0
Закрывается соединение с БД при долгом запросе
    #39575461
Pavlo7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman, спасибо, пошел смотреть!
...
Рейтинг: 0 / 0
Закрывается соединение с БД при долгом запросе
    #39576263
Pavlo7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помог более простой способ:
jdbcTemplateForUpdate.setQueryTimeout(36000);
всем спасибо!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Закрывается соединение с БД при долгом запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]