import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameter;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.core.step.tasklet.TaskletStep;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemStreamReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.json.JacksonJsonObjectReader;
import org.springframework.batch.item.json.JsonItemReader;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.core.io.FileSystemResource;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.UUID;
/**
* @ClassName CustomJob
* @Description: TODO
* @Author
* @Date 2020/6/1 11:05
* @Version V1.0
**/
@Component
public class CustomJob {
/***
* json 格式reader
* @methodName jsonFileReader
* @param filePath
* @return org.springframework.batch.item.ItemReader
* @author
* @date 2020/5/29 9:07
* @throws
*/
@Bean()
@Scope(value = "step", proxyMode = ScopedProxyMode.INTERFACES)
public ItemStreamReader jsonFileDemoReader(@Value("#{jobParameters[filePath]}") String filePath ) throws Exception {
JacksonJsonObjectReader jacksonJsonObjectReader = new JacksonJsonObjectReader(Cat.class);
jacksonJsonObjectReader.setMapper(new ObjectMapper());
JsonItemReader itemReader = new JsonItemReader(new FileSystemResource(filePath), jacksonJsonObjectReader);
itemReader.setName(ReadJsonFileJob2.class.getName()+"jsonFileDemoReader");
return itemReader;
}
@Bean("fromJson2FileDemoWriter")
public ItemWriter fromJson2FileDemoWriter(){
CommonFileItemWriter commonFileItemWriter = new CommonFileItemWriter(Cat.class);
return commonFileItemWriter;
}
/**
* 定义Job
*
* @param jobBuilderFactory
* @param readJsonFileDemoStep 步骤
* @return
*/
@Bean("readJsonFileDemo2Job")
public Job readJsonFileDemo2Job(JobBuilderFactory jobBuilderFactory, Step readJsonFileDemoStep) {
return jobBuilderFactory.get("readJsonFileDemo2Job")
.incrementer(parameters -> {
Map<String, JobParameter> parameterMap = parameters.getParameters();
parameterMap.put("key", new JobParameter(UUID.randomUUID().toString()));
return parameters;
})
.start(readJsonFileDemoStep).preventRestart().build();
}
/**
* step 配置
*
* @param stepBuilderFactory
* @param jsonFileDemoReader 读bean
* @param fromJson2FileDemoWriter 写bean
* @return
*/
@Bean("readJsonFileDemoStep")
public Step readJsonFileDemoStep(StepBuilderFactory stepBuilderFactory,
ItemReader jsonFileDemoReader, ItemWriter fromJson2FileDemoWriter ) {
TaskletStep readJsonFileStep = stepBuilderFactory.get("readJsonFileDemoStep")
.<HasHeadMessageBean, HasHeadMessageBean>chunk(10)
.reader(jsonFileDemoReader)
// .processor(processor)
.writer(fromJson2FileDemoWriter)
.build();
return readJsonFileStep;
}
}