我的要求几乎与此处post中描述的要求相同。即,在文件生成器Spring Batch完成后触发Spring Integration程序。我主要在这里使用Spring Integration示例:XML Configuration和Test。我观察到的是,Test程序将配置文件初始化为ClassPathXmlApplicationContext,然后根据需要设置一些值。忽略配置,程序的关键似乎是以下四行:
final File file = new File(sourceFileName);
final Message<File> message = MessageBuilder.withPayload(file).build();
final MessageChannel inputChannel = ac.getBean("inputChannel", MessageChannel.class);
inputChannel.send(message);
我想知道是否有选项将其移入配置文件本身,因此我不必创建消息或将其从测试程序传递到MessageChannel但是可以启动Spring批处理并在作业完成后观察它调用Outbound SFTP触发器。如果这样做,我的工作大部分都已完成,以便我可以将其作为Spring Batch作业的下一步插入。
如果您注意到入站适配器的示例,我可以使用以下代码行在config file中完成所有这些操作:
<int-sftp:inbound-channel-adapter id="sftpInbondAdapter"
channel="receiveChannel"
session-factory="sftpSessionFactory"
local-directory="file:${inbound.local.directory}"
remote-directory="${inbound.remote.directory}"
auto-create-local-directory="true"
delete-remote-files="false"
filename-pattern="*.*">
<int:poller max-messages-per-poll="-1" fixed-rate="1000" />
</int-sftp:inbound-channel-adapter>
<int:channel id="receiveChannel">
<int:queue/>
</int:channel>
并从test program我可以做如下:
PollableChannel localFileChannel = context.getBean("inboundFileChannel", PollableChannel.class);
System.out.println("Received first file message: " + localFileChannel.receive());
可能是我在这里缺少一些非常基本的东西。我还查看了前一篇文章中调用Tasklet的sample cited here,再次在Tasklet中,用户正在初始化上下文文件,这在我的案例中似乎不是一个好方法,因为我将拥有我的Spring Batch和Spring Integration配置在相同的XML中,看起来像循环调用。
答案 0 :(得分:0)
您可以使用Messaging Gateway。只需定义POJI并在与批处理作业相同的上下文中将其配置为<gateway/>
。将它注入一个tasklet步骤,它将调用该流程。
或者,使用JobLaunchingGateway
启动批处理作业,然后在网关完成后执行sftp工作。