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

我需要将图像上传到 FTP 服务器。因此,我创建了与 SessionFactory、MessageHandler 和 MessageGateway 的集成配置,用于将文件上传到 FTP 服务器:


@Configuration

@IntegrationComponentScan

public 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);

    }


}

成功构建应用程序。然后我试图上传一些文件:


@Autowired

UploadGateway uploadGateway;



@Override

public void uploadImage(byte[] scanBytes, String filename, String path) {

    try {

        uploadGateway.upload(scanBytes, filename, path);

    } catch (Exception e) {

        log.error("WRONG", e);

    }

}

然后它说:“没有名为'toFtpChannel'的bean可用” 我几乎尝试了每个教程,我做错了什么?



慕村9548890
浏览 165回答 2
2回答

繁星coding

您的应用程序看起来不像真的是 Spring Boot:我们没有看到@SpringBootApplication注释。正是这个将启动正确的自动配置,包括用于 Spring Integration 的自动配置。如果您仍然不关心那里的 Spring Boot,那么您将缺少一个标准@EnableIntegration注释:https&nbsp;:&nbsp;//docs.spring.io/spring-integration/docs/current/reference/html/overview.html#configuration-enable-一体化

FFIVE

在您可以在注释中引用它之前,请求通道应该实际存在。声明频道,该问题应该消失@Beanpublic MessageChannel toFtpChannel() {&nbsp; &nbsp; return new DirectChannel();}此示例创建,DirectChannel但您可以根据您的语义选择任何实现。希望能帮助到你!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java