Spring Integration Outbound Adapter实现CSV/DB数据传FTP的教程咨询
Spring Integration FTP Outbound Adapter 场景实现参考
场景1:接收用户上传CSV文件并发送至FTP
- 依赖要求:项目需引入
spring-boot-starter-integration与spring-integration-ftp依赖,同时搭配spring-boot-starter-web对外提供HTTP接口 - 实现流程:
- 开发POST接口接收
MultipartFile类型的CSV文件参数 - 将接收到的文件流/临时文件封装为Spring Integration标准
Message对象,传入预定义的消息通道 - 配置FTP出站适配器绑定上述消息通道,设置FTP服务器连接参数、远程存储路径、文件存在时的处理策略(覆盖/跳过/重命名)
- 可配置重试通知处理FTP连接异常、权限不足等异常场景
- 开发POST接口接收
- 优化建议:大文件场景开启流式传输,避免本地磁盘生成临时缓存文件
场景2:拉取当日数据库新增记录生成CSV发送至FTP
- 实现流程:
- 开发触发接口,接口被调用后执行数据库查询逻辑,筛选当日新增的业务数据
- 借助CSV处理工具将数据列表序列化为CSV格式,可选择生成本地临时文件或直接封装为字节流
- 将CSV资源封装为
Message对象,携带文件名、生成时间等自定义头信息后发送至FTP出站适配器绑定的消息通道
- 优化建议:自定义
FileNameGenerator实现CSV文件按业务规则命名,比如使用业务标识_年月日_时间戳.csv的格式,避免文件重名冲突
核心配置参考
以下为FTP出站适配器的常用Java配置片段
// FTP会话工厂配置,复用连接提升性能 @Bean public SessionFactory<FTPFile> ftpSessionFactory() { DefaultFtpSessionFactory sessionFactory = new DefaultFtpSessionFactory(); sessionFactory.setHost("FTP服务器地址"); sessionFactory.setPort(21); sessionFactory.setUsername("登录账号"); sessionFactory.setPassword("登录密码"); // 被动模式配置,按需开启 sessionFactory.setClientMode(FTPClient.PASSIVE_LOCAL_DATA_CONNECTION_MODE); return new CachingSessionFactory<>(sessionFactory); } // FTP出站适配器配置 @Bean @ServiceActivator(inputChannel = "ftpMessageChannel") public MessageHandler ftpOutboundAdapter(SessionFactory<FTPFile> ftpSessionFactory) { FtpMessageHandler handler = new FtpMessageHandler(ftpSessionFactory); // 设置远程存储目录 handler.setRemoteDirectoryExpression(new LiteralExpression("/data/csv/")); // 设置文件名生成规则 handler.setFileNameGenerator(message -> message.getHeaders().get("file_name", String.class) ); // 文件已存在时执行覆盖 handler.setFileExistsMode(FileExistsMode.REPLACE); return handler; }
内容的提问来源于stack exchange,提问作者Good Developer
相关产品推荐
相关产品推荐

