JDB C Проблема блокировки таблиц шаблонов - PullRequest
0 голосов
/ 19 января 2020

Я использую шаблон JDB C для вставки / обновления таблицы БД. У меня есть следующая конфигурация источника данных:

@Bean
  public DataSource dataSource() {
    HikariDataSource dataSource = new HikariDataSource();
    SQLServerDataSource ds = new SQLServerDataSource();
    ds.setUser("user name");
    ds.setPassword("Password");
    ds.setPortNumber(123);
    ds.setDatabaseName("DB name");
    ds.setServerName("Server");
    ds.setEncrypt(true);
    ds.setTrustServerCertificate(true);
    dataSource.setAutoCommit(true);
    dataSource.setMaximumPoolSize(size);
    dataSource.setMinimumIdle(idle);
    dataSource.setDataSource(ds);

    return dataSource;
  }

Моя проблема - блокировка таблицы. Я получаю доступ, вставляю и обновляю таблицу my_table, предоставляя конечную точку API. Поэтому, когда я впервые нажимаю на конечную точку, конечная точка вставляет три строки в таблицу, которая и предназначена. После первого попадания последующее другое попадание в конечную точку занимает 2/3 минуты для вставки данных. В течение этого периода я даже не могу получить доступ к своему my_table с помощью клиентского приложения MS SQL.

Я думаю, это может быть из-за открытых коммитов, поэтому я сделал:

dataSource.setAutoCommit(true);

Но не удача. После того, как первая таблица попаданий заблокирована на некоторое время, а все последующие обращения или прямой доступ к этой таблице БД занимает слишком много времени.

Приложение Java отлично работает на локальном хосте, но после развертывания на Azure (Приложение обслуживание), я получаю проблему блокировки таблицы. Я не уверен, что проблема с блокировкой таблицы или чем-то, из-за чего эта таблица занята. Я использую сервер MS SQL, который также находится в облаке.

ПРИМЕЧАНИЕ. На уровне DAO я просто использую jdbcTemplate.update() для добавления или редактирования данных, а в методе уровня обслуживания, который я использую @Transactional.

1 Ответ

1 голос
/ 20 января 2020

Я создал новый проект и проверил его, и он работал нормально. Вы можете получить его по адресу: Источник данных

Таблица пользователей:

enter image description here

Я использовал jdbcTemplate.update() для добавления и обновите пользователя, а также включите @Transactional на JdbcUserRepository. Однако таблица не была заблокирована при попытке добавить пользователя:

enter image description here

На снимке экрана видно, что я сделал много запросов POST к добавлять пользователей, и на каждый запрос сразу же приходит ответ.

Итак, я думаю, что root причина проблемы все еще может быть в logi c части вашего кода. Не могли бы вы поделиться больше кода для дальнейшего расследования.

...