Java Spring引导批处理Spring数据jpa

Java Spring引导批处理Spring数据jpa,java,spring,spring-boot,spring-data-jpa,spring-batch,Java,Spring,Spring Boot,Spring Data Jpa,Spring Batch,我使用的是SpringBoot+SpringBatch+JPA+Mysql。以下是我的以下内容: spring启动应用程序 ``` ``` 基于表结构创建@实体类 创建了如下所示的reposity接口 ``` ``` 批量配置 ``` ``` 完成所有配置后,每5秒运行一次应用程序,作业运行正常,在process类中获取值并打印,然后进入writer类并打印所有值,而不显示错误 问题是:它没有用write方法更新数据库中的值。 在没有BatchScheduler、scheduler和job la

我使用的是SpringBoot+SpringBatch+JPA+Mysql。以下是我的以下内容:

  • spring启动应用程序
  • ```

    ```

  • 基于表结构创建@实体类
  • 创建了如下所示的reposity接口
  • ```

    ```

  • 批量配置
  • ```

    ```

    完成所有配置后,每5秒运行一次应用程序,作业运行正常,在process类中获取值并打印,然后进入writer类并打印所有值,而不显示错误

    问题是:它没有用write方法更新数据库中的值。

    在没有BatchScheduler、scheduler和job launcher(提交代码)的情况下,重新启动spring boot,并更新数据库中的所有值。


    你们能告诉我我做错了什么吗。

    我已经解决了这个问题。在批处理配置中,如果使用

    ```

    ```

    它开始工作了

    Thanks,
    Bala.
    

    不需要使用DefaultCurdMethods,您可以像下面这样直接使用。reader.setMethodName(“保存”);问题:writer bean是否有调试点?是的,这就是我提到的。所有的系统输出都可以打印,但不能持久
    @Component
    public interface ExampleRepository extends JpaRepository<tableClass, Long> {
       Page<tableClass> findTop10ByStatus(tableClassStatus status,
                Pageable pageable);
    }
    
    @Configuration
        @EnableScheduling
        public class BatchScheduler {
    
            @Bean
            public ResourcelessTransactionManager transactionManager() {
                return new ResourcelessTransactionManager();
            }
    
            @Bean
            public JobExplorer jobExplorer() throws Exception {
                MapJobExplorerFactoryBean jobExplorerFactory = new MapJobExplorerFactoryBean(
                        mapJobRepositoryFactory());
                jobExplorerFactory.afterPropertiesSet();
                return jobExplorerFactory.getObject();
            }
    
            @Bean
            public MapJobRepositoryFactoryBean mapJobRepositoryFactory() throws Exception {
                MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean();
                factory.setTransactionManager(transactionManager());
                return factory;
            }
    
            @Bean
            public JobRepository jobRepository() throws Exception {
                return mapJobRepositoryFactory().getObject();
            }
    
            @Bean
            public JobLauncher jobLauncher() throws Exception {
                SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
                simpleJobLauncher.setJobRepository(jobRepository());
                return simpleJobLauncher;
            }
    
        }
    
    @Configuration
        @EnableBatchProcessing
        @Import({ BatchScheduler.class })
        public class BatchConfiguration2 {
    
            @Autowired
            public StepBuilderFactory stepBuilderFactory;
    
            @Autowired
            public JobBuilderFactory jobBuilderFactory;
    
            @Autowired
            private SimpleJobLauncher jobLauncher;
    
            @Autowired
            public ExampleRepository exampleRepository ;
    
            @Scheduled(cron = "0/5 * * * * ?")
            public void perform() throws Exception {
                System.out.println("Job Started at :" + new Date());
    
                JobParameters param = new JobParametersBuilder()
                        .addString("JobID", String.valueOf(System.currentTimeMillis())).toJobParameters();
    
                JobExecution execution = jobLauncher.run(job(), param);
    
                System.out.println("Job finished with status :" + execution.getStatus());
    
            }
    
            @Bean
            public RepositoryMetadata repositoryMetadata() {
                return new DefaultRepositoryMetadata(ExampleRepository.class);
            }
    
            @Bean
            public RepositoryItemReader<tableClass> reader() {
                RepositoryItemReader<tableClass> fullfillment = new RepositoryItemReader<tableClass>();
                fullfillment.setRepository(ExampleRepository);
                fullfillment.setMethodName("findTop10ByStatus");
                List<tableClassStatus> list = new ArrayList<tableClassStatus>();
                list.add(tableClassStatus.FULFILLMENT_READY);
                fullfillment.setArguments(list);
                HashMap<String, Sort.Direction> sorts = new HashMap<>();
                sorts.put("id", Direction.DESC);
                fullfillment.setSort(sorts);
                return fullfillment;
            }
    
            /* @Bean
            public RepositoryItemWriter<tableClass> writer() {
                System.out.println("BatchConfiguration.writer()");
                RepositoryItemWriter<tableClass> itemWriter = new RepositoryItemWriter<tableClass>();
                itemWriter.setRepository(ExampleRepository);
                itemWriter.setMethodName("save");
                return itemWriter;
            }*/
    
            @Bean
            public RepositoryItemWriter<tableClass> writer() {
                System.out.println("BatchConfiguration.writer()");
                DefaultCrudMethods defaultCrudMethods = new DefaultCrudMethods(repositoryMetadata());
                RepositoryItemWriter<tableClass> itemWriter = new RepositoryItemWriter<tableClass>();
                itemWriter.setRepository(ExampleRepository);
                itemWriter.setMethodName(defaultCrudMethods.getSaveMethod().getName());
                return itemWriter;
            }
    
            @Bean
            public Step step1() throws Exception {
                return this.stepBuilderFactory.get("step1")
                        .<tableClass, tableClass> chunk(1).reader(reader())
                        .processor(new QuoteOfferFullfillmentSubmitionProcessor()).writer(writer()).build();
            }
    
    
            @Bean
            public Job job() throws Exception {
    
                return this.jobBuilderFactory.get("job").incrementer(new RunIdIncrementer()).start(step1())
                        .listener(new JobCompletionListener()).build();
    
            }
    
        }
    
    public class QuoteOfferFullfillmentSubmitionProcessor implements ItemProcessor<QuoteOfferFulfillment, QuoteOfferFulfillment> {
    
            @Override
            public tableClass process(tableClass item) throws Exception {
    
                System.out.println("Processor.process() ==> ID " + item.getId());
                System.out.println("Processor.process() ==> " + item.getLenderName());
                System.out.println(
                        "QuoteOfferFullfillmentSubmitionProcessor.process() ==> source" + item.getStatus());
                item.setStatus(QuoteOfferFulfillmentStatus.PROCESSING);
                return item;
            }
    
        }
    
    public class JobCompletionListener extends JobExecutionListenerSupport {
                @Override
                public void afterJob(JobExecution jobExecution) {
                    if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
                        System.out.println("BATCH JOB COMPLETED SUCCESSFULLY");
                    }
                }
    
            }
    
    @Bean
        public ResourcelessTransactionManager resourcelessTransactionManager() {
            return new ResourcelessTransactionManager();
        }
    
        @Bean
        public JobRepository jobRepository() throws Exception {
            return new MapJobRepositoryFactoryBean(resourcelessTransactionManager()).getObject();
        }
    
    Thanks,
    Bala.