Как изменить установленный режим блокировки для ожидания в весенней загрузке приложения, которое использует informix и jdbcTemplate? - PullRequest
1 голос
/ 01 октября 2019

Я использую Spring boot 2 с jdbcTemplate в моем приложении. Я использовал Informix. Я тестирую параллелизм и хочу, чтобы мое приложение немного подождало, когда запрос попытается обновить заблокированную строку. Это время можно установить в Informix с помощью «SET LOCK MODE TO WAIT 20». Но я ищу метод весной jdbcTemplate или что-то весной.

Я пытался установить таймаут в jdbcTemplate.setQueryTimeout(60);, но он не работал.

Любая идея приветствуется.

jdbcTemplate.setQueryTimeout(60);
cachedExecutor.execute(() -> jdbcTemplate.update(updatenIndoPeriodeInLfa()) );

cachedExecutor.execute(() -> jdbcTemplate.update(updatenAfroPeriodeInLfa()) );

private String updatenIndoPeriodeInLfa(){
        String query = "UPDATE  lfa " +
                "set indomonth = 09, indoyear = 2019 , indotype = indo " +
                "WHERE lfa.id in (select id " +
                "                   from   procindo " +
                "                   where  month   =   09    and" +
                "                          year    =   2019     and" +
                "                          type=   indo );";

        return query;
    }

    private String updatenAfroPeriodeInLfa(){
        String query = "UPDATE  lfa " +
                "set afromonth = 09, afroyear  = 2019 , afrotype = indo " +
                "WHERE lfa.id in (select id " +
                "                   from   procafro " +
                "                   where  month   =   09    and" +
                "                          year    =   2019     and" +
                "                          type=   afro );";

        return query;
    }

1 Ответ

2 голосов
/ 01 октября 2019

После просмотра документации Informix я сталкиваюсь с этим:

Приложение может использовать это свойство для переопределения процесса сервера по умолчанию для доступа к заблокированной строке или таблице. Получает значение переменной IFX_LOCK_MODE_WAIT, характерной для Informix. Значение по умолчанию 0 (не ждите блокировки). Если значение было установлено явно, оно возвращает установленное значение. Возвращает: целое число. Устанавливает значение переменной IFX_LOCK_MODE_WAIT, характерной для Informix. Возможные значения:

-1 ПОДОЖДИТЕ до снятия блокировки.

0 НЕ ПОДОЖДИТЕ, завершите операцию и вернитесь с ошибкой.

nn ПОДОЖДИТЕ nn секунд для снятия блокировки.

Затем в конфигурации источника данных моего приложения передало это свойство следующим образом:

@Bean(name = "informixDataSource")
public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.informix.jdbc.IfxDriver");

        Properties properties = new Properties();
        properties.put("IFX_LOCK_MODE_WAIT", "60");

        dataSource.setConnectionProperties(properties);
        dataSource.setUrl(jdbc.getUrl());
        dataSource.setUsername(jdbc.getUser());
        dataSource.setPassword(jdbc.getPassword());

        return dataSource;
    }
...