当前位置: 首页 > 知识库问答 >
问题:

Spring集成-服务执行元引发文件写入操作错误

裴欣然
2023-03-14
implementation 'org.springframework.boot:spring-boot-starter-integration'
implementation 'org.springframework.integration:spring-integration-file'
@EnableIntegration
@IntegrationComponentScan
@SpringBootApplication
public class IntegrationApplication {

    public static void main(String[] args) {
        SpringApplication.run(CpKiboIntegrationApplication.class, args);
    }

    @Bean
    public FileWritingMessageHandler fileWritingMessageHandler() {
        return new FileWritingMessageHandler(new File("outDir"));
    }

    @Bean
    @InboundChannelAdapter(channel = "fileInputChannel", poller = @Poller(fixedDelay = "5000"))
    public MessageSource<File> pollableFileSource() {
        FileReadingMessageSource fileReadingMessageSource = new FileReadingMessageSource();
        fileReadingMessageSource.setDirectory(new File("inputDir"));
        fileReadingMessageSource.setFilter(new SimplePatternFileListFilter("*.txt"));

        return fileReadingMessageSource;
    }

}
@Service
public class ActivatorService {
    @Autowired
    private FileWritingMessageHandler fileWritingMessageHandler;

    @ServiceActivator(inputChannel = "fileInputChannel")
    public MessageHandler fileReceiver(Message<?> message) {
        fileWritingMessageHandler.setFileExistsMode(FileExistsMode.REPLACE);
        fileWritingMessageHandler.setDeleteSourceFiles(true);
        fileWritingMessageHandler.setExpectReply(false);
        fileWritingMessageHandler.setAutoCreateDirectory(true);

        return fileWritingMessageHandler;
    }
}

O.S.I.ExpressionUtils:创建没有beanFactory的EvaluationContext

错误:

原因:

原因:org.SpringFramework.Messaging.core.DestinationResolutionException:org.SpringFramework.Integration.Handler.AbstractMessageProducingHandler.SendOutput(AbstractMessageProducingHandler.java:426)(org.SpringFramework.Integration.Handler.AbstractMessageProducingHandler.DoProduceOutput(AbstractMessageProducingHandler.284)(

共有1个答案

壤驷鸿
2023-03-14

FileWritingMessageHandler必须是@bean

您自己调用new,因此它不是由Spring管理的。

在任何情况下,您都不希望每个消息都有一个新的处理程序。

@Bean
@ServiceActivator(inputChannel = "fileInputChannel")
public MessageHandler fileReceiver() {
    FileWritingMessageHandler handler = new FileWritingMessageHandler(new File("outDir"));
    handler.setFileExistsMode(FileExistsMode.REPLACE);
    handler.setDeleteSourceFiles(true);
    handler.setExpectReply(false);

    handler.setAutoCreateDirectory(true);
    return handler;
}
 类似资料:
  • 代码从卡中刮取单个事件,但我一直收到以下错误: C:\Python27\python.exeC:/用户/詹姆斯/PycharmProjects/剪贴画/scrapy.py回溯(最近的调用最后):文件"C:/用户/詹姆斯/PycharmProjects/剪贴画/scrapy.py",第31行,在writer.writerow(c)值错误: I/O关闭文件的操作 我正在使用pyCharm。 退出代码为

  • 我目前正在使用Spring集成实现一些导入/导出机制,总的来说进展很顺利,但在功能方面似乎存在差距,我不了解: 有Spring集成文件轮询目录,写入文件,...我可以用它来轮询一个目录,并获得一个

  • 我是Vert的新手。我正在尝试实现一个小型REST API,它将数据存储在本地文件系统的JSON文件中。 到目前为止,我设法实现了REST API,因为Vertx在这方面有很好的文档记录。 我目前正在寻找的是如何在Vert. x中构建数据访问对象的示例。我怎样才能实现一个可以对包含JSON的文本文件执行粗鲁操作的版本? 你能给我举些例子吗?有什么提示吗? 更新1: 通过对文件进行CRUD操作,我想

  • 我正在我的项目中使用spring批处理spring集成sftp。我不希望在应用程序启动时触发下载。我希望下载过程在步骤1中触发,并在所有文件下载到本地后继续执行步骤2,不确定如何实现这一点

  • 我正在开发一个Spring集成应用程序。 我有一个入站通道适配器,用于读取目录,然后是一个拆分器,用于将文件拆分为行,最后是一个udp出站通道适配器,用于发送行 我想每秒钟发一封信 我可以通过定义自己的拆分器并在每次读取一行时等待1s来做到这一点,但我想知道是否可以在xml文件中尽可能简单地完成它。 提前谢谢

  • 我有一个队列通道和一个带有轮询器的服务激活器,轮询器从该队列中读取数据。我希望配置为“我希望50个线程轮询该队列,每次轮询并返回消息时,在此线程上调用服务激活器指向的服务。” 该服务没有异步注释,但无状态,可以以并发方式安全运行。 下面的方法能做到吗?有没有其他首选的方法来实现这一点?