powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [закрыт для гостей] / jdbcTemplate без аннотаций и транзакция
3 сообщений из 3, страница 1 из 1
jdbcTemplate без аннотаций и транзакция
    #207942
reload
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите, что бы могло случится вот с таким кодом:
Код: Java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
    @Scheduled(cron = "0 0 20 * * *")
    private void refreshBiHistoricalTables() {

        MapSqlParameterSource namedParameters = new MapSqlParameterSource();
        jdbcTemplate.update("""
        insert into bi_hist_product_rows_sales_report select
          sales_rank
          ,vendor_code
          ,name
          ,price
          ,quantity
          ,mounths_count
          ,last_sale_date
          ,last_sale_days
          ,avg_amnt
          ,avg_cnt
          ,total_amnt
          ,total_cnt
          ,amnt_01
          ,amnt_02
          ,amnt_03
          ,amnt_04
          ,amnt_05
          ,amnt_06
          ,amnt_07
          ,amnt_08
          ,amnt_09
          ,amnt_10
          ,amnt_11
          ,amnt_12
          ,cnt_01
          ,cnt_02
          ,cnt_03
          ,cnt_04
          ,cnt_05
          ,cnt_06
          ,cnt_07
          ,cnt_08
          ,cnt_09
          ,cnt_10
          ,cnt_11
          ,cnt_12
          ,product_link
          ,forecast
          , now() from vw_product_rows_sales_report r
                    """, namedParameters);

    }
после месяцев работы, если не года, вдруг начало зависать. судя по всему спринг бут вдруг перестал коммитить транзакцию. у mariadb, вторую ночь подряд, вижу этот квери висит в дедлоке с бэкапом, который на 3 часа позже запускается.
я верно ожидаю, что без аннотаций на методе спринг каждый стейтмент должен коммитить ?
...
Рейтинг: 0 / 0
jdbcTemplate без аннотаций и транзакция
    #212085
vimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
reload  10.11.2022, 09:38
[игнорируется]
я верно ожидаю, что без аннотаций на методе спринг каждый стейтмент должен коммитить ?
Нет вообще не будет коммитить. Чтобы такой код работал как ты хочешь нужно чтобы на коннекшене который jdbcTemplate получает из DataSource стоял автокоммит. Если раньше это работало значит только такие коннекшены в jdbcTemplate и приходили, но потом что-то пошло не так, возможно какой-то другой код в твоем приложении тоже использует коннекшены из этого же датасорса, и в одной из веток выставляет connection.setAutocimmit(false) но по какой-то причине не вызывает ни commit() ни rollback() перед возвращением коннекшена в пул, таким образом в пуле от таких злодействий образуются коннекшены с незакрытыми транзакциями, которые пул может отдать другим потребителям. Конечно чтобы моя теория подтвердилась нужно чтобы реализация датасорса была туповатой и не проверяла что ей обратно возвращают в пул. Что там у тебя за класс реализующий датасорс и с какими параметрами он сконфигурирован?
...
Изменено: 14.11.2022, 16:44 - vimba
Рейтинг: 0 / 0
jdbcTemplate без аннотаций и транзакция
    #212352
reload
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, разобрался. оказалось причина в mysql, селект читает вьюшку, в которой простенькая функция, она в составе вью просто перестала работать (причем год работало). отдельно работала, в составе вью просто висит бесконечно. выставил deterministic, перекомпилил - заработало.
по методу, ок. понял. лучше пометить транзакцию явно.
...
Рейтинг: 1 / 0
Нравится: vimba
3 сообщений из 3, страница 1 из 1
Форумы / Java [закрыт для гостей] / jdbcTemplate без аннотаций и транзакция
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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