Spring batch 写入多文件 避免同一个文件过大

public class MultiFileWriter extends MultiResourceItemWriter {

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

    public MultiFileWriter(){
        init();
    }

    private void init(){
        setName(name);
        /*这里设置最后存储的文件位置 最后的user  不可以丢 丢了 不会生成文件*/
        setResource(new FileSystemResource("E:\\code\\user"));
        /*设置每个文件的最多存入数量*/
        setItemCountLimitPerResource(2);
        setDelegate(initXmlWriter());
        /*这里定义文件 最后生成的文件名 这里最终生成的文件名称就是 user+ System.currentTimeMillis()+".xml";*/
        setResourceSuffixCreator(new ResourceSuffixCreator() {
            @Override
            public String getSuffix(int i) {
                return System.currentTimeMillis()+".xml";
            }
        });
    }

    private StaxEventItemWriter initXmlWriter(){

        StaxEventItemWriter staxEventItemWriter = new StaxEventItemWriter();

        XStreamMarshaller xStreamMarshaller = new XStreamMarshaller();
        String[] names = new String[]{"user","people"};
        /*如果只有一种数据类型 可以使用这个*/
//        setFragmentRootElementName("user");
        /*如果有多种数据类型使用这个*/
        staxEventItemWriter.setRootTagName("users");

        Map aliases = new HashMap<>();
        aliases.put("user", User.class);
        aliases.put("name", String.class);
        aliases.put("tag", String.class);
        aliases.put("phone", String.class);
        aliases.put("address", String.class);
        aliases.put("cardNum", String.class);
        aliases.put("time", String.class);

        aliases.put("people", People.class);
        xStreamMarshaller.setAliases(aliases);

        staxEventItemWriter.setMarshaller(xStreamMarshaller);

        return staxEventItemWriter;
    }

}

你可能感兴趣的:(Spring batch 写入多文件 避免同一个文件过大)