Spring Batch - удаление метаданных после завершения задания выдает ошибку - неправильный размер результата: ожидаемый 1,JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring Batch - удаление метаданных после завершения задания выдает ошибку - неправильный размер результата: ожидаемый 1,

Сообщение Anonymous »

Я использую пакет Spring с репозиторием h2.
Приложение запускается каждую минуту (для моего тестирования), и мне не требуется сохранять метаданные пакета после завершения задания. Поэтому я написал CustomJobListener для очистки таблиц после каждого запуска задания.

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

@Slf4j
@Component
public class CustomJobExecutionListener implements JobExecutionListener {

Map  emptyMap = new HashMap();
@Autowired
@Qualifier("jdbcTemplateH2")
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

@Override
public void afterJob(JobExecution jobExecution) {
JobExecutionListener.super.afterJob(jobExecution);
log.info("Job completed, will delete table metadata---");

namedParameterJdbcTemplate.update("DELETE FROM BATCH_STEP_EXECUTION_CONTEXT", emptyMap);
namedParameterJdbcTemplate.update("DELETE FROM BATCH_STEP_EXECUTION", emptyMap);
namedParameterJdbcTemplate.update("DELETE FROM BATCH_JOB_EXECUTION_CONTEXT", emptyMap);
namedParameterJdbcTemplate.update("DELETE FROM BATCH_JOB_EXECUTION_PARAMS", emptyMap);
namedParameterJdbcTemplate.update("DELETE FROM BATCH_JOB_EXECUTION", emptyMap);
namedParameterJdbcTemplate.update("DELETE FROM BATCH_JOB_INSTANCE", emptyMap);
log.info("---------------------Metadata from all tables deleted successfully---------------------------");
}
}
Это работает нормально, и данные таблицы удаляются, однако после этого в журналах я вижу следующую ошибку:

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

  Executing prepared SQL statement [SELECT VERSION\nFROM BATCH_JOB_EXECUTION\nWHERE JOB_EXECUTION_ID=?\n]","logger_name":"org.springframework.jdbc.core.JdbcTemplate","thread_name":"scheduling-1","level":"DEBUG","level_value":10000}
{"@timestamp":"2024-09-18T21:13:25.8614103+05:30","@version":"1","message":"Initiating transaction rollback","logger_name":"org.springframework.orm.jpa.JpaTransactionManager","thread_name":"scheduling-1","level":"DEBUG","level_value":10000}
{"@timestamp":"2024-09-18T21:13:25.8614103+05:30","@version":"1","message":"Rolling back JPA transaction on EntityManager [SessionImpl(1440235680)]","logger_name":"org.springframework.orm.jpa.JpaTransactionManager","thread_name":"scheduling-1","level":"DEBUG","level_value":10000}
{"@timestamp":"2024-09-18T21:13:25.8614103+05:30","@version":"1","message":"Closing JPA EntityManager [SessionImpl(1440235680)] after transaction","logger_name":"org.springframework.orm.jpa.JpaTransactionManager","thread_name":"scheduling-1","level":"DEBUG","level_value":10000}
{"@timestamp":"2024-09-18T21:13:25.8614103+05:30","@version":"1","message":"Job: [FlowJob: [name=learnSpringBatch]] failed unexpectedly and fatally with the following parameters: [{'JobID':'{value=1153310559084400, type=class java.lang.String, identifying=true}'}]","logger_name":"org.springframework.batch.core.launch.support.SimpleJobLauncher","thread_name":"scheduling-1","level":"INFO","level_value":20000,"stack_trace":"org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
Я отладил исходный код и обнаружил, что вызывается обратный вызов afterjob
[img]https://i.sstatic.net /cWOzk7Jg.png[/img]

который вызывает обновление в SimpleJobRepository
Изображение

который вызывает запрос в журналах
Изображение

Поскольку таблицы уже были очищены (усечены) в CustomJobListener, ожидается ошибка, но ошибка в журналах: "Job: [ FlowJob: [name=learnSpringBatch]] неожиданно и фатально завершился сбой со следующими параметрами: [{'JobID':'{value=1153310559084400, type=class java.lang.String, идентификация=true} '}]","logger_name":"org.springframework.batch.core.launch.support.SimpleJobLauncher","thread_name":"scheduling-1","level":"INFO","level_value":20000," stack_trace":"org.springframework.dao.EmptyResultDataAccessException: Неправильный размер результата: ожидаемый 1, фактический 0" заставляет меня задуматься, правильно ли я это делаю.
Можно ли игнорировать ошибку?
Правильно ли я делаю?

Подробнее здесь: https://stackoverflow.com/questions/789 ... correct-re
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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