Spring batch Spring批处理中的XML编组
我有一个JdbcCursorItemReader,它从数据库中读取数据,并使用行映射器将结果集转换为对象。现在的需求是将对象打包成XML,然后必须将XML放入消息队列中 三个问题: 1.Spring批处理中的封送处理程序应该实现为ItemProcessor还是ItemWriter 2.无需将XML写入文件,只需将其作为消息中的字符串对象发送即可。Spring Batch中最好的方法是什么 3.如果封送拆收器和消息分派器都应该作为单独的写入程序实现,那么如何将它们链接起来呢 任何示例代码或链接都将非常感谢Spring batch Spring批处理中的XML编组,spring-batch,Spring Batch,我有一个JdbcCursorItemReader,它从数据库中读取数据,并使用行映射器将结果集转换为对象。现在的需求是将对象打包成XML,然后必须将XML放入消息队列中 三个问题: 1.Spring批处理中的封送处理程序应该实现为ItemProcessor还是ItemWriter 2.无需将XML写入文件,只需将其作为消息中的字符串对象发送即可。Spring Batch中最好的方法是什么 3.如果封送拆收器和消息分派器都应该作为单独的写入程序实现,那么如何将它们链接起来呢 任何示例代码或链接都将
谢谢创建一个自定义编写器,通过ItemWriter写入数据时将使用该编写器 根据您的要求进行了一些修改的示例代码:
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();
}
}
导入java.io.StringWriter;
导入java.io.Writer;
导入javax.xml.stream.XMLEventWriter;
导入javax.xml.stream.XMLOutputFactory;
导入javax.xml.stream.XMLStreamException;
公共类CustomXMLWriter扩展org.springframework.batch.item.xml.StatxeventitemWriter{
私人作家;
/**
*子类可以重写以自定义编写器。
*/
@凌驾
受保护的XMLEventWriter createXmlEventWriter(XMLOutputFactory outputFactory,Writer-Writer)
抛出XMLStreamException{
myWriter=新的StringWriter();
返回outputFactory.createXMLEventWriter(myWriter);
}
@凌驾
公众假期结束(){
字符串outputXML=myWriter.toString()+“”;
System.out.println(outputXML);
//此处的代码用于在消息队列中添加生成的XML字符串
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>
我认为SpringBatch现在可以使用ChannelItemWriter
。如果您从将XML片段写入Spring集成通道(然后可以由消息队列支持)的角度来处理这个问题,那么您可以这样编写定制的ItemWriter
。这将允许您以两种不同的方式(在ItemProcessor
中或在Spring集成中通过transformer)进行项转换。如果您采用这种方法,我建议您将作者重新贡献给Spring Batch。谢谢。有一件事,看起来这段代码需要添加到close()方法中:myWriter.append(“”);否则,xml将不会用根标记关闭。请告诉我它是否按照你的要求工作。到目前为止看起来不错,谢谢。我将尝试将这个ItemWriter放在一个步骤中,然后进行第二个步骤,它将获取第一个步骤的输出。第二步将使用JMSItemWriter。谢谢,我已经更新了我的答案,最后也添加了根标记名。不明白你的意思。如何在Spring Batch中通过ItemProcessor完成XML封送?您必须实现一个定制的ItemProcessor
,它接收您的项目并返回一个字符串,然后手动进行封送。Spring批处理中没有组件可以开箱即用。