Spring batch 读取多类型相同的文件

reader

public class MutiFileReader extends MultiResourceItemReader {

    private String name = this.getClass().getName();

    public MutiFileReader(){
        try {
            init();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    private void  init() throws FileNotFoundException {

        /*存放文件的地址*/
        File file = new File("E:\\code\\temp");
        File[] files= file.listFiles();
        Resource[] resources = new Resource[files.length];
        for(int i=0;i() {
//            @Override
//            public int compare(Resource o1, Resource o2) {
//                return 0;
//            }
//        });


        setName(name);
        setResources(resources);
        FlatFileItemReader reader = new FlatFileItemReader();

        /*SimpleRecordSeparatorPolicy 每一行作为一条记录*/
        reader.setRecordSeparatorPolicy(new SimpleRecordSeparatorPolicy());/*定义分割单条数据的策略*/

        /*定义每一条记录 转换java实体类*/
        DefaultLineMapper lineMapper = new DefaultLineMapper();

        /*每一条记录转换为 fileSet对象 也可以理解为key-value 对象 */
        /*delimiter 参数定义分隔符*/
        DelimitedLineTokenizer delimitedLineTokenizer =new DelimitedLineTokenizer(",");
        delimitedLineTokenizer.setNames("userName","passWord","phone","time");
        lineMapper.setLineTokenizer(delimitedLineTokenizer);

        /*设置fileSet 转换为java 实体*/
        BeanWrapperFieldSetMapper beanWrapperFieldSetMapper = new BeanWrapperFieldSetMapper();
        beanWrapperFieldSetMapper.setTargetType(User.class);
        lineMapper.setFieldSetMapper(beanWrapperFieldSetMapper);
        reader.setLineMapper(lineMapper);/*转换读取内容为java 实体*/
        reader.setLinesToSkip(2);/*设置忽略文件的前几行*/
//        setStrict();/*检测文件是否存在 如果文件不存在 job失败*/
        String[] comments = new String[]{"##"};
        reader.setComments(comments); /*定义文件的注释行 也就是 读取时 会忽略的内容*/

        /*这里只能设置一种代理 只能有一种处理方式吗*/
        setDelegate(reader);
    }
}

writer

public class CusFlatItemFileWriter extends FlatFileItemWriter {

    private String funcName = this.getClass().getSimpleName();
    private String filePath;
    private FileSystemResource fileSystemResource;
    public CusFlatItemFileWriter(String filePath){
        this.filePath = filePath;
        init();
        fileSystemResource = new FileSystemResource("E:\\code\\user.txt");
        setResource(fileSystemResource);
    }

    private void init(){
        setName(funcName);
        setAppendAllowed(true);
        /*设置 处理java对象的存储方式*/
        DelimitedLineAggregator lineAggregator = new DelimitedLineAggregator();
        lineAggregator.setDelimiter(",");
        BeanWrapperFieldExtractor beanWrapperFieldExtractor = new BeanWrapperFieldExtractor();
        /*保存的时候 要显示的对应的实体的字段*/
        String[] names = new String[]{"userName","phone","time","passWord"};
        beanWrapperFieldExtractor.setNames(names);
        /*这个没什么意思 就是null 校验*/
        beanWrapperFieldExtractor.afterPropertiesSet();
        lineAggregator.setFieldExtractor(beanWrapperFieldExtractor);
        setSaveState(false);
        setLineAggregator(lineAggregator);
        /*设置 是否 追加 还是 覆盖*/
        setAppendAllowed(false);
    }
}

运行

@SpringBootTest
public class MultiFileTest {

    @Autowired
    private JobLauncher jobLauncher;

    @Autowired
    public JobBuilderFactory jobBuilderFactory;
    @Autowired
    public StepBuilderFactory stepBuilderFactory;


    private Step createStep(){
        String name = User.class.getName();
        Step  step =stepBuilderFactory.get(name)
                .chunk(1)
                .reader(new MutiFileReader())
                .writer(new CusFlatItemFileWriter("user_writer.txt"))
                .build();

        return step;
    }

    private Job createJob(){
        String name = User.class.getName();
        return jobBuilderFactory.get(name).flow(createStep())
                .end().build();
    }
    @Test
    public  void runJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {
        //构建参数
        JobParameters jobParameters = new JobParametersBuilder()
                .toJobParameters();
        jobLauncher.run(createJob(),jobParameters);
    }
}

你可能感兴趣的:(Spring batch 读取多类型相同的文件)