处理后的Spring集成移动文件
Posted
技术标签:
【中文标题】处理后的Spring集成移动文件【英文标题】:Spring integration move file after processing 【发布时间】:2016-11-16 05:57:47 【问题描述】:处理文件后如何在spring集成中处理后移动文件..? 我已经按照http://xpadro.blogspot.com/2016/07/spring-integration-polling-file.html实现了文件轮询,但是需要添加onSuccess和OnError跨国事件(不带XML配置)
【问题讨论】:
【参考方案1】:我不确定您所说的“事务”是什么意思,文件系统通常不是事务性的,但是您可以在流程中向最终消费者添加建议...
@SpringBootApplication
public class So40625031Application
public static void main(String[] args)
SpringApplication.run(So40625031Application.class, args);
@Bean
public IntegrationFlow flow()
return IntegrationFlows.from(
Files.inboundAdapter(new File("/tmp/foo")), e -> e.poller(Pollers.fixedDelay(1000)))
.transform(Transformers.fileToString())
.handle("processor", "process", e -> e.advice(advice()))
.get();
@Bean
public Processor processor()
return new Processor();
@Bean
public AbstractRequestHandlerAdvice advice()
return new AbstractRequestHandlerAdvice()
@Override
protected Object doInvoke(ExecutionCallback callback, Object target, Message<?> message) throws Exception
File file = message.getHeaders().get(FileHeaders.ORIGINAL_FILE, File.class);
try
Object result = callback.execute();
file.renameTo(new File("/tmp/bar", file.getName()));
System.out.println("File renamed after success");
return result;
catch (Exception e)
file.renameTo(new File("/tmp/baz", file.getName()));
System.out.println("File renamed after failure");
throw e;
;
public static class Processor
public void process(String in)
System.out.println(in);
【讨论】:
这正是我要找的。感谢您的解决方案。 当我将Transformers.fileToString()
替换为 Transformers.fromJson(My.class)
以便直接从文件中读取 JSON 对象时,它不起作用。 JSON 转换器丢失了文件名标头。在from(Files...)
之后添加.enrichHeaders(h -> h.headerExpression(FileHeaders.ORIGINAL_FILE, "payload"))
以使其正常工作。
这太棒了。谢谢以上是关于处理后的Spring集成移动文件的主要内容,如果未能解决你的问题,请参考以下文章