Skip to content
This repository has been archived by the owner on May 25, 2019. It is now read-only.

Améliorer le cron de récuperation des matchs #3

Open
1 task
CNadjim opened this issue Sep 21, 2018 · 4 comments
Open
1 task

Améliorer le cron de récuperation des matchs #3

CNadjim opened this issue Sep 21, 2018 · 4 comments

Comments

@CNadjim
Copy link
Member

CNadjim commented Sep 21, 2018

@CNadjim
Copy link
Member Author

CNadjim commented Sep 21, 2018

@Configuration
@EnableScheduling
@EnableBatchProcessing
@EnableMBeanExport
@Slf4j
public class BatchConfig {

    private RestTemplate restTemplate;
    private ModelMapper modelMapper;
    private final TeamRepository teamRepository;

    public BatchConfig(TeamRepository teamRepository){
        this.teamRepository = teamRepository;
        this.modelMapper = new ModelMapper();
        this.restTemplate = new RestTemplate();
        this.restTemplate.getInterceptors().add(new RestTemplateInterceptor());
    }

    //Reader
    @Bean
    public TeamReader teamReader() {
        return new TeamReader("https://api.football-data.org/v2/competitions/2000/teams",this.restTemplate);
    }

    //Processor
    @Bean
    public TeamProcessor teamProcessor() {
        return new TeamProcessor(this.modelMapper);
    }

    //Writer
    @Bean
    public TeamWriter teamWriter() {
        return new TeamWriter(this.teamRepository);
    }


    @Bean(name = "teamStep")
    public Step buildTeamStep(StepBuilderFactory stepBuilderFactory,
                              TeamReader teamReader,
                              TeamProcessor teamProcessor,
                              TeamWriter teamWriter) {

        TaskletStep step = stepBuilderFactory.get("build-team-step")
                .allowStartIfComplete(true)
                .<TeamDto, Team>chunk(1)
                .faultTolerant()
                .reader(teamReader)
                .processor(teamProcessor)
                .writer(teamWriter)
                .build();

        DefaultTransactionAttribute transactionAttribute = new DefaultTransactionAttribute();
        transactionAttribute.setTimeout(60);

        step.setTransactionAttribute(transactionAttribute);

        return step;
    }

    @Bean(name = "teamJob")
    public Job payoffJob(@Qualifier("teamStep") Step teamStep, JobBuilderFactory jobBuilderFactory) throws Exception {
        return jobBuilderFactory.get("build-team-job")
                .incrementer(new RunIdIncrementer())
                .flow(teamStep)
                .end()
                .build();
    }
}

@CNadjim
Copy link
Member Author

CNadjim commented Sep 21, 2018

public class TeamReader implements ItemReader<TeamDto> {

    private String apiUrl;
    private RestTemplate restTemplate;

    private int nextTeamIndex;
    private List<TeamDto> teamData;

    public TeamReader(String apiUrl, RestTemplate restTemplate) {
        this.apiUrl = apiUrl;
        this.restTemplate = restTemplate;
        this.nextTeamIndex = 0;
    }

    @Override
    public TeamDto read() throws Exception {
        if (teamDataIsNotInitialized()) {
            teamData = fetchTeamDataFromAPI();
        }

        TeamDto nextTeam = null;

        if (nextTeamIndex < teamData.size()) {
            nextTeam = teamData.get(nextTeamIndex);
            nextTeamIndex++;
        }

        return nextTeam;
    }

    private boolean teamDataIsNotInitialized() {
        return this.teamData == null;
    }

    private List<TeamDto> fetchTeamDataFromAPI() {
        return restTemplate.getForObject(apiUrl, TeamsDto.class).getTeams();
    }
}

@CNadjim
Copy link
Member Author

CNadjim commented Sep 21, 2018

public class TeamProcessor implements ItemProcessor<TeamDto,Team> {
    private ModelMapper modelMapper;

    public TeamProcessor(ModelMapper modelMapper){
        this.modelMapper = modelMapper;
    }
    @Override
    public Team process(TeamDto teamDto) throws Exception {
        Team team = modelMapper.map(teamDto,Team.class);
        team.setId(null);
        return team;
    }
}

@CNadjim
Copy link
Member Author

CNadjim commented Sep 21, 2018

public class TeamWriter implements ItemWriter<Team> {
    private TeamRepository teamRepository;

    public TeamWriter(TeamRepository teamRepository) {
        this.teamRepository = teamRepository;
    }

    @Override
    public void write(List<? extends Team> teams) throws Exception {
        teamRepository.save(teams);
    }
}

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant