Почему моя пакетная работа выполняется без остановки, когда я вызываю API остальных, в котором работает только один сотрудник - PullRequest
0 голосов
/ 08 февраля 2019

Почему пакетное задание выполняется без остановки при вызове api rest, у которого есть только одна запись json. Я попытался исправить проблему, проверив другие ресурсы, и я не смог найти никакого решения.Пользовательский itemreader идет бесконечным циклом. Пожалуйста, помогите мне, где я делаю неправильно

Если я прокомментирую код ниже в методе read (), это работает, как я знаю, когда json заканчивает чтение, чтобы я мог вернуть нуль:

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();
    }

}

1 Ответ

0 голосов
/ 11 февраля 2019

После изменения способа чтения () метод работает. Он работает.

@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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...