我正在使用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个实例?