Я использую шаблон 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
.