Тасклет или ItemReader, который делает звонки в Google Cloud Datastore - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь создать тасклет 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();
}

1 Ответ

0 голосов
/ 25 сентября 2019

У меня есть настроенный источник данных (экземпляр mySql), поддерживающий Spring Batch для хранения метаданных выполнения задания.

Если вы используете разные источники данных для метаданных Spring Batch и ваших бизнес-данныхзатем необходимо настроить диспетчер транзакций XA для синхронизации транзакции между обоими источниками данных.Таким образом, как данные, так и метаданные синхронизируются в случае сценария сбоя / перезапуска.

Аналогичные вопросы и ответы можно найти здесь: Отдельный источник данных для репозитория заданий и средства записи Spring Batch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...