Я пытаюсь создать тасклет Spring Batch, который вызывает DatastoreRepository
.Шаг выполнения тасклета
@Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext)
throws Exception {
String syncId = this.stepExecutionContext.getJobParameters()
.getString(JobParameterKeys.SYNC_ID);
SyncJob syncJob = syncJobRepo.findById(Long.parseLong(syncId)).get();
Когда я пытаюсь вызвать syncJobRepo, я получаю исключение org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionStatus in scope
.
У меня есть настроенный источник данных (экземпляр mySql), поддерживающий Spring Batch для храненияметаданные выполнения задания.
Я пытался определить DatastoreTransactionManager
@Bean
DatastoreTransactionManager datastoreTransactionManager() {
DatastoreTransactionManager manager
= new DatastoreTransactionManager(DatastoreOptions.getDefaultInstance().getService());
return manager;
}
Моя конфигурация помечена @EnableBatchProcessing
Конфигурация пакетного задания:
@Bean public Job customersJob(StepBuilderFactory stepBuilderFactory,
JobBuilderFactory jobBuilderFactory,
Tasklet batchCustomerReader,
SyncJobNotificationListener listener,
DatastoreTransactionManager datastoreTransactionManager) {
Step step = stepBuilderFactory.get(CUSTOMERS_BATCH_JOB_LOAD_FROM_ERP_STEP)
.tasklet(batchCustomerReader)
.transactionManager(datastoreTransactionManager)
.listener(listener)
.build();
return jobBuilderFactory.get(CUSTOMERS_BATCH_JOB)
.incrementer(new RunIdIncrementer())
.start(step)
.build();
}