首先感谢关注,我结合了弹簧批量和弹簧集成,我定义了一个作业流程并从ftp适配器检索文件并发送到jobChannel,并使用spring批处理它,我想写入输出通道并消耗处理后的频道,我的代码是:
<int-ftp:outbound-gateway id="gatewayGET"
local-directory-expression="'./backup/' +#remoteDirectory"
session-factory="ftpSessionFactory"
request-channel="toGetChannel"
reply-channel="toProcessChannel"
command="get"
temporary-file-suffix=".writing"
command-options="-P"
expression="payload.remoteDirectory + '/' + payload.filename"/>
<int:channel id="toProcessChannel">
<int:interceptors>
<int:wire-tap channel="logger2"/>
</int:interceptors>
</int:channel>
<int:channel id="outboundJobRequestChannel"/>
<int:channel id="replyJobChannel"/>
<service-activator input-channel="jobLaunchReplyChannel"/>
<int:transformer input-channel="toProcessChannel" output-channel="outboundJobRequestChannel">
<bean class="ir.isc.macna.configuration.FileMessageToJobRequest">
<property name="fileParameterName" value="fileName"/>
</bean>
</int:transformer>
<batch-int:job-launching-gateway request-channel="outboundJobRequestChannel"
reply-channel="jobLaunchReplyChannel"/>
我的编剧代码是:
@Component
@StepScope
public class MacnaFileWriter implements ChunkMessageChannelItemWriter<FileInfo> {
@Autowired
@Qualifier("replyJobChannel")
private MessageChannel messageChannel;
@Override
public void write(List<? extends FileInfo> list) throws Exception {
// send Message to replyJobChannel channel with Send method
}
}
并使用ftp adapter在服务器上写入文件:
<int-ftp:outbound-gateway session-factory="ftpSessionFactory"
request-channel="replyJob"
command="mput"
auto-create-directory="true"
expression="payload"
remote-directory-expression="payload.remoteDirectory + '/' + payload.filename + '.out'"
reply-channel="output"/>
这是运行批处理作业和消费结果的标准方法吗?
答案 0 :(得分:1)
MessageChannel
有send
方法。为此,您可以使用MessageBuilder
为Message<?>
创建payload
。
由于它只是<channel>
,因此与其他任何MessageChannel
消费没有区别。标准方式定义了这样的消费者:
<service-activator input-channel="jobLaunchReplyChannel"/>
但是,如果此频道特定于jobLaunchReplyChannel
(<batch-int:job-launching-gateway>
类)的结果,则不清楚为什么要向JobLaunchingGateway
发送消息:
jobExecution = this.jobLaunchingMessageHandler.launch(jobLaunchRequest);
因此,jobExecution
已发送到jobLaunchReplyChannel
。
请参阅Spring Batch Integration文档。
也许您需要AsyncItemWriter
或ChunkMessageChannelItemWriter
?