为什么我的批处理作业没有停止运行时,我调用它只有一个员工的REST API

问题描述 投票:0回答:1

为什么批处理作业运行没有停止调用它只有一个JSON record.I试图通过检查其他资源来解决该问题的REST API的时候,我可以没有发现任何solution.I认为这个问题是自定义项目reader.Custom itemreader会无限loop.Could请帮我在哪里即时做错了

如果我下面的代码在阅读()评论方法它的工作原理是如何知道何时JSON是读完,这样我可以返回null:

if(employee != null){
            logger.info("After the  rest read method"+employee);
           return  employee;
          }

控制器:

@RestController
@RequestMapping("/api")
public class EmployeeController {

    @GetMapping("/employee")
    public Employee getEmployeeByID()  {
        return new Employee(7000,"lombok15","lombok10","8676876866","lombok15","AB6876");
    }

}

CustomerItemReader:

@Component
public class EmployeeItemReader implements ItemReader<Employee> {

    private static final Logger logger = LoggerFactory.getLogger("EmployeeItemReader.class");
    private static final String REST_URL = "http://localhost:9590/api/employee";
    private Employee employee = null;


    private RestTemplate restTemplate;

    @Override
    public Employee read() {
        Employee employee = null;

        logger.info("inside rest read method"+employee);
        logger.info("Fetching the employee date from the database");

        restTemplate = new RestTemplate();

        ResponseEntity<Employee> response = restTemplate.getForEntity(REST_URL,Employee.class);
        employee = response.getBody();

          if(employee != null){
            logger.info("After the  rest read method"+employee);
           return  employee;
          }
        return null;
    }


}

SpringBatchConfig:

@Configuration
@EnableBatchProcessing
public class SpringBatchConfig {

    Logger logger = LoggerFactory.getLogger("SpringBatchConfig.class");

    @Bean
    public Job job(JobBuilderFactory jobBuilderFactory,
                   StepBuilderFactory stepBuilderFactory,
                   ItemReader<Employee> itemReader,
                   ItemProcessor<Employee, Employee> itemProcessor,
                   ItemWriter<Employee> itemWriter
    ) {

        Step step = stepBuilderFactory.get("EMPLOYEE-FILE-WRITTER-JOB")
                .<Employee, Employee>chunk(1)
                .reader(itemReader)
                .processor(itemProcessor)
                .writer(itemWriter)
                .build();


        return jobBuilderFactory.get("EMPLYEE-FILE-JOB")
                .incrementer(new RunIdIncrementer())
                .start(step)
                .build();
    }

    @Bean
    public ItemReader<Employee> itemReader(){
        return  new EmployeeItemReader();
    }

}
spring-batch
1个回答
0
投票

改变的阅读方式后()方法是working.It工作。

@Override
    public Employee read() throws Exception {

        logger.info("Reading the information of the next employee");

        if (employeeDataIsNotInitialized()) {
            employeeData = fetchStudentDataFromAPI();
        }

        Employee nextEmployee = null;

        if (nextEmployeeIndex < employeeData.size()) {
            nextEmployee = employeeData.get(nextEmployeeIndex);
            nextEmployeeIndex++;
        }

        logger.info("Found employee: >>>>>>>>>", nextEmployee);

        return nextEmployee;
    }
© www.soinside.com 2019 - 2024. All rights reserved.