В следующем методе я пытаюсь запустить запрос обновления в виде пакетов. Но этот метод зависает время от времени, когда он запускается. Мое предположение заключается в том, что по какой-то причине он создает блокировку таблицы БД на sample_table, а затем, когда executebatch запускается снова, он ожидает, что блокировка будет выпущена. В конечном итоге процесс зависает.Лучший способ реализовать набор запросов обновления в виде пакетов с использованием executebatch() в цикле
Мои вопросы
- ли это лучший способ осуществить запрос на обновление для пакета выполнения?
- Должен ли я не устанавливать autocommit в false и затем фиксировать после каждого ps.executeBatch() в цикле.
- Это эффективнее, добавив все партии, а затем совершая или совершая каждую партию снова и снова.
Примечание: Количество записей обновленными может доходить до 9000 записей (9000 ID) и BATCHSIZE переменная установлена в 1000
private void updateMethod(List<Long> idList)
{
int batchSizeCount = 0;
PreparedStatement ps = null;
ResultSet rs = null;
Connection con = criteriaWrapper.getConnection();
StringBuilder sb = new StringBuilder("UPDATE sample_table SET column_name1 = 1 , column_name2 = SYSTIMESTAMP WHERE sample_table.table_id = ? ");
try
{
con.setAutoCommit(false);
ps = con.prepareStatement(sb.toString());
for(Long table_id : idList)
{
int count = 0;
ps.setLong(++count, table_id);
ps.addBatch();
if (++batchSizeCount % batchSize == 0)
{
ps.executeBatch();
functionProvider.logger(); //Prints previously appended logs
}
}
ps.executeBatch();
con.commit();
con.setAutoCommit(true);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
DBUtility.close(rs);
DBUtility.close(ps);
}
}
К сожалению, использование пружины для меня не является вариантом. – direndd
Весенняя партия делает то же самое, что и вы. Он способен обрабатывать гораздо больше, чем 9k в одной партии. Вы можете легко выполнить в одной партии. Вам может потребоваться отслеживать возвращаемое значение выполнения, чтобы увидеть, сколько было успешным, чтобы решить, хотите ли вы выполнить фиксацию или нет. – krmanish007