Как обновить строку в таблице при чтении строк с помощью потока Java (адаптивная буферизация)?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как обновить строку в таблице при чтении строк с помощью потока Java (адаптивная буферизация)?

Сообщение Anonymous »

Я получаю все активные элементы из базы данных. Я проверяю из внешнего источника, активны они или нет. А затем я установил неактивные как неактивные в своей базе данных. Я делаю это один за другим (как поток Java), потому что данные действительно большие.
Проблема в том, что обновления фиксируются в самом конце всего процесса, поскольку это транзакция.
Шаги следующие:
Я читаю данные из большой таблицы, используя поток (адаптивная буферизация, также известная как небуферизованная):

Код: Выделить всё

public void checkActiveItemsFromTheDb() {
itemsRepository.streamAllByIsActive(true).forEach(entity -> {
Integer id = entity.getId();
checkIfItemIsInactiveAndUpdate(id);
});
}
Затем я передаю его в другую службу для обновления, называемую updateItemService.

Код: Выделить всё

@Async
protected void checkIfItemIsInactiveAndUpdate(String id) {
ItemView itemView = findBySearchId(id);
Boolean isActive = itemView.getIsActive();
if (isActive == false) {
// makes update
}
}
Переход на другой сервис не помог. Он по-прежнему обновляется после считывания всех данных.
Как отправить запрос на обновление, пока продолжается адаптивное чтение? Здесь около 50 000 элементов, и лишь некоторые из них нуждаются в обновлении. Весь процесс (чтение и внешняя проверка) занимает около 15 минут. Я просто пытаюсь сделать обновление, не дожидаясь конца. Я пробовал использовать ключевые слова @EnableAsync, @Async, @Transactional, @Transactional(readOnly = true), но они не помогли.
В качестве образца я использую
  • Java 25
  • Spring Boot 3.5
  • Microsoft SQL Server 2025


Подробнее здесь: https://stackoverflow.com/questions/798 ... adaptive-b
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»