Spring批处理Jaxb2Marshaller共享JAXBContext

时间:2017-10-25 16:43:43

标签: jaxb spring-batch

我正在使用StaxEventItemReader来解组xml。在我的导入过程中可以有许多相同类型的文件(我使用自定义分区程序来读取每个线程的1个文件),我得到了很多:

  

o.s.oxm.jaxb.Jaxb2Marshaller:用。创建JAXBContext   要绑定的类

我在https://stackoverflow.com/a/7400735/384984上读到JAXBContext是线程安全的。因此,似乎可以改进该部分并仅使用1个实例。

我正在使用这个读者:

public class MultiResourceXmlImportReader<T> extends MultiResourceItemReader<T> {

    public MultiResourceXmlImportReader(FileTypeEnum fileType, Resource... resources)  {
        super();
        setResources(resources);
        setDelegate(new XmlImportReader(fileType.getRootElementName(), fileType.getXmlEntityClass()));
    }
}

使用此ResourceAwareItemReaderItemStream:

public class XmlImportReader<T> extends StaxEventItemReader<T> {

    public XmlImportReader(String rootElementName, Class<T> modelClass) {
        setFragmentRootElementName(rootElementName);

        Jaxb2Marshaller itemMarshaller = new Jaxb2Marshaller();
        itemMarshaller.setClassesToBeBound(modelClass);
        setUnmarshaller(itemMarshaller);
    }

    public XmlImportReader(String rootElementName, Class<T> modelClass, Resource resource) {
        this(rootElementName, modelClass);
        setResource(resource);
    }

}

无论如何只使用JAXBContext的1个实例?

0 个答案:

没有答案