为了账号安全,请及时绑定邮箱和手机立即绑定

Spring集成“没有可用的名为'toFtpChannel'的bean”

Spring集成“没有可用的名为'toFtpChannel'的bean”

慕村9548890 2021-11-11 18:21:06
我需要将图像上传到 FTP 服务器。因此,我创建了与 SessionFactory、MessageHandler 和 MessageGateway 的集成配置,用于将文件上传到 FTP 服务器:@Configuration@IntegrationComponentScanpublic class FtpConfiguration {    @Bean    public SessionFactory<FTPFile> ftpSessionFactory() {        DefaultFtpSessionFactory defaultFtpSessionFactory = new DefaultFtpSessionFactory();        //setup        return new CachingSessionFactory<>(defaultFtpSessionFactory);    }    @Bean    @ServiceActivator(inputChannel = "toFtpChannel")    public MessageHandler handler() {        FtpMessageHandler handler = new FtpMessageHandler(ftpSessionFactory());        handler.setAutoCreateDirectory(true);        handler.setRemoteDirectoryExpression(new LiteralExpression(""));        handler.setFileNameGenerator(message -> (String) message.getHeaders().get("filename"));        return handler;    }    //to show you that I've tried both    /*@Bean    public IntegrationFlow ftpOutboundFlow() {        return IntegrationFlows.from("toFtpChannel")                .handle(Ftp.outboundAdapter(ftpSessionFactory(), FileExistsMode.REPLACE)                        .useTemporaryFileName(false)                        .fileNameExpression("headers['" + FileHeaders.FILENAME + "']")                        .remoteDirectory("")                ).get();    }*/    @MessagingGateway    public interface UploadGateway {        @Gateway(requestChannel = "toFtpChannel")        void upload(@Payload byte[] file, @Header("filename") String filename, @Header("path") String path);    }}成功构建应用程序。然后我试图上传一些文件:@AutowiredUploadGateway uploadGateway;@Overridepublic void uploadImage(byte[] scanBytes, String filename, String path) {    try {        uploadGateway.upload(scanBytes, filename, path);    } catch (Exception e) {        log.error("WRONG", e);    }}然后它说:“没有名为'toFtpChannel'的bean可用” 我几乎尝试了每个教程,我做错了什么?
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

您的应用程序看起来不像真的是 Spring Boot:我们没有看到@SpringBootApplication注释。正是这个将启动正确的自动配置,包括用于 Spring Integration 的自动配置。

如果您仍然不关心那里的 Spring Boot,那么您将缺少一个标准@EnableIntegration注释:https : //docs.spring.io/spring-integration/docs/current/reference/html/overview.html#configuration-enable-一体化


查看完整回答
反对 回复 2021-11-11
?
FFIVE

TA贡献1797条经验 获得超6个赞

在您可以在注释中引用它之前,请求通道应该实际存在。声明频道,该问题应该消失


@Bean

public MessageChannel toFtpChannel() {

    return new DirectChannel();

}

此示例创建,DirectChannel但您可以根据您的语义选择任何实现。


希望能帮助到你!


查看完整回答
反对 回复 2021-11-11
  • 2 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信