为什么批处理作业运行没有停止调用它只有一个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();
}
}
改变的阅读方式后()方法是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;
}