import
org.springframework.batch.core.Job;
import
org.springframework.batch.core.Step;
import
org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import
org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import
org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import
org.springframework.batch.core.launch.support.RunIdIncrementer;
import
org.springframework.batch.item.ItemReader;
import
org.springframework.batch.item.ItemWriter;
import
org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.Configuration;
@Configuration
@EnableBatchProcessing
public
class
BatchConfiguration {
private
final
JobBuilderFactory jobBuilderFactory;
private
final
StepBuilderFactory stepBuilderFactory;
public
BatchConfiguration(JobBuilderFactory jobBuilderFactory,
StepBuilderFactory stepBuilderFactory) {
this
.jobBuilderFactory = jobBuilderFactory;
this
.stepBuilderFactory = stepBuilderFactory;
}
@Bean
public
ItemReader<Article> customJsonArticleReader() {
List<String> jsonArticles = Arrays.asList(
"{\"title\":\"Article 1\",\"content\":\"Content 1\"}"
,
"{\"title\":\"Article 2\",\"content\":\"Content 2\"}"
);
return
new
CustomJsonArticleReader(jsonArticles);
}
@Bean
public
ItemWriter<Article> customDatabaseArticleWriter(ArticleRepository articleRepository) {
return
new
CustomDatabaseArticleWriter(articleRepository);
}
@Bean
public
Step processArticlesStep(ItemReader<Article> customJsonArticleReader, ItemWriter<Article> customDatabaseArticleWriter) {
return
stepBuilderFactory.get(
"processArticlesStep"
)
.<Article, Article>chunk(
10
)
.reader(customJsonArticleReader)
.writer(customDatabaseArticleWriter)
.build();
}
@Bean
public
Job processArticlesJob(Step processArticlesStep) {
return
jobBuilderFactory.get(
"processArticlesJob"
)
.incrementer(
new
RunIdIncrementer())
.flow(processArticlesStep)
.end()
.build();
}
}