Проблема с моей конфигурацией Spring Batch: задание читает, обрабатывает, записывает 10 элементов из базы данных, пропусJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с моей конфигурацией Spring Batch: задание читает, обрабатывает, записывает 10 элементов из базы данных, пропус

Сообщение Anonymous »

Я новичок в Spring Batch и все еще учусь.
Вопрос: Я столкнулся с проблемой в проекте Spring Batch. Я пытаюсь читать, обрабатывать и обновлять объекты на основе их обработанного флага в базе данных. Вот описание моей настройки и проблемы:
До: База данных содержит 300 записей, если обработано значение «False» — ее следует рассматривать для обработки в пакетное задание.
введите здесь описание изображения
Ожидается: после запуска пакетного задания все необработанные записи (processed = "False") должно быть прочитано, а сумма должна быть увеличена на 1 и записана обратно в БД с обработанным = "true
Описание проблемы:
Я настроил Пакетное задание Spring для чтения, обработки и обновления сущностей BankTransaction. Цель состоит в том, чтобы обработать только те транзакции, которые не были обработаны (обработано = false), добавить 1 доллар к их сумме, пометить их как обработанные (обработано = true) и сохранить. их обратно в базу данных.
Текущее поведение:
Задание считывает 10 элементов, обрабатывает их, обновляет их флаг обработки до значения true и сохраняет их. Однако во время последующей операции чтения программа чтения пропускает следующие 10 элементов и продолжает этот шаблон.
введите здесь описание изображения
Вот мое. код:
Класс чтения

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

package com.dev.springbatch.batch;

import com.dev.springbatch.entity.BankTransaction;
import jakarta.persistence.EntityManagerFactory;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.database.JpaPagingItemReader;
import org.springframework.batch.item.database.builder.JpaPagingItemReaderBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class BankTransactionsItemReader implements ItemReader {

private final EntityManagerFactory entityManagerFactory;

@Autowired
public BankTransactionsItemReader(EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory;
}

@Override
public JpaPagingItemReader read() {
return bankTransactionsReader();
}

public JpaPagingItemReader bankTransactionsReader() {
final String SELECT_ALL_QUERY = "SELECT c FROM BankTransaction c where c.processed = false";
return new JpaPagingItemReaderBuilder()
.name("bankTransactionItemReader")
.entityManagerFactory(entityManagerFactory)
.queryString(SELECT_ALL_QUERY)
.saveState(false)  // Ensures the reader does not maintain state between runs
.pageSize(10)
.build();

}
}

класс процессора

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

package com.dev.springbatch.batch;

import com.dev.springbatch.entity.BankTransaction;
import lombok.NonNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;

@Component
public class BankTransactionItemProcessor implements ItemProcessor {
private static final Logger logger = LoggerFactory.getLogger(BankTransactionItemProcessor.class);
private static final BigDecimal ONE_DOLLAR = BigDecimal.valueOf(1);

@Override
public BankTransaction process(@NonNull BankTransaction bankTransaction) {
return updateBankTransaction(bankTransaction);
}

// adding 1 dollar to the amount
private BankTransaction updateBankTransaction(BankTransaction bankTransaction) {
logger.info("Processing item: {}", bankTransaction);
BigDecimal updatedAmount = bankTransaction.getAmount().add(ONE_DOLLAR);
bankTransaction.setAmount(updatedAmount);
bankTransaction.setProcessed(true);
return bankTransaction;
}

}
класс писателя

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

package com.dev.springbatch.batch;

import com.dev.springbatch.entity.BankTransaction;
import com.dev.springbatch.repository.BankTransactionsRepository;
import jakarta.persistence.EntityManagerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.item.Chunk;
import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class BankTransactionsItemWriter implements ItemWriter {

private final BankTransactionsRepository bankTransactionsRepository;
private static final Logger logger = LoggerFactory.getLogger(BankTransactionsItemWriter.class);

@Autowired
public BankTransactionsItemWriter(final BankTransactionsRepository bankTransactionsRepository) {
this.bankTransactionsRepository = bankTransactionsRepository;
}

@Override
public void write(final Chunk

Подробнее здесь: [url]https://stackoverflow.com/questions/78691907/issue-with-my-spring-batch-configuration-job-reads-processes-writes-10-items[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с моей конфигурацией Spring Batch: задание читает, обрабатывает, записывает 10 элементов из базы данных, пропус
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Kafka Streams и Spring Batch Conflict – «Необходимо указать имя задания», несмотря на Spring.batch.job.enabled: false
    Anonymous » » в форуме JAVA
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • PHP не читает/записывает смайлы из базы данных MYSQL [дубликат]
    Anonymous » » в форуме Php
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Можно ли запустить задание Spring Batch внутри другого задания?
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Можно ли запустить задание Spring Batch внутри другого задания?
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

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