首页 文章

Spring Batch中的XML编组

提问于
浏览
0

我有一个JdbcCursorItemReader,它从数据库中读取并使用行映射器将结果集转换为对象 . 现在的要求是将对象编组为XML,然后必须将其放在消息队列中 .

三个问题:

1. Spring Batch中的编组器是作为ItemProcessor还是作为ItemWriter实现的?

2. 无需将XML写入文件,而只需将其作为字符串对象发送到消息中 . Spring Batch中最好的方法是什么?

3. 如果编组器和消息调度程序都应该作为单独的编写器实现,那么如何将它们链接起来呢?

任何示例代码或链接将非常感激 .

谢谢

2 回答

  • 0

    我认为Spring Batch现在可以使用 ChannelItemWriter . 如果您从将XML剪辑写入Spring集成通道(可以由消息队列支持)的角度来处理此问题,则可以通过这种方式编写自定义 ItemWriter . 这将允许您以几种不同的方式接近项目转换(在 ItemProcessor 或通过Spring Integration中的变换器) . 如果你采用这种方法,我建议你将作者贡献给Spring Batch .

  • 0

    创建一个自定义编写器,将在通过ItemWriter写入数据时使用 .

    示例代码HERE,根据您的要求进行了一些修改:

    import java.io.StringWriter;
    import java.io.Writer;
    
    import javax.xml.stream.XMLEventWriter;
    import javax.xml.stream.XMLOutputFactory;
    import javax.xml.stream.XMLStreamException;
    
    public class CustomXMLWriter extends org.springframework.batch.item.xml.StaxEventItemWriter<User> {
    
        private Writer myWriter;
    
        /**
         * Subclasses can override to customize the writer.
         */
        @Override
        protected XMLEventWriter createXmlEventWriter(XMLOutputFactory outputFactory, Writer writer)
                throws XMLStreamException {
            myWriter = new StringWriter();
            return outputFactory.createXMLEventWriter(myWriter);
        }
    
        @Override
        public void close() {
            String outputXML = myWriter.toString() + "</" + this.getRootTagName() + ">";
            System.out.println(outputXML);
            // code here to add the resultant XML string in message queue
            super.close();
        }
    
    }
    

    在此示例中,您必须提及输出资源,但生成的XML文件始终只包含根标记名称 .

    XML:

    <bean id="customXMLItemWriter" class="com.mkyong.CustomXMLWriter">
        <property name="resource" value="file:xml/outputs/users.xml" />
        <property name="marshaller" ref="userUnmarshaller" />
        <property name="rootTagName" value="users" />
    </bean>
    

相关问题