Spring Integration:消除设置 bean 的重复代码

2023-12-23

对于我的 SFTP 客户端项目,我使用 spring 集成。我们有不同的客户端,必须连接到不同的 SFTP 服务器,但是,所有逻辑都是相同的,所以我将它们抽象为 AbstractSFTPEndPoint。每个特定于客户端的类都实现 getClientId(),AbstractSFTPEndPoint 使用 getClientId() 来获取特定于客户端的详细信息,例如 SFTP 凭据。

然而,所有客户端的整个逻辑都是相同的,但我仍然必须为每个客户端实现特定的类。这主要是因为我们需要为每个客户端单独的“MessageSource”。

我怎样才能摆脱这种重复?

public class SFTPEndPointForClientAAAA extends AbstractSFTPEndPoint {

    public String getClientId(){
       return "clientAAAA";
    }

    @Bean(name = "channelForClientAAAA")
    public QueueChannel inputFileChannel() {
        return super.inputFileChannel();
    }

    @ServiceActivator(inputChannel = "channelForClientAAAA", poller = @Poller(fixedDelay = "500"))
    public void serviceActivator(Message message) {
        super.serviceActivator(message);
    }

    @Bean(name = "messageSourceForClientAAAA")
    @InboundChannelAdapter(value = "channelForClientAAAA",
            poller = @Poller(fixedDelay = "50", maxMessagesPerPoll = "2"))
    public MessageSource messageSource() {
        return super.messageSource();
    }
}

基本上我有一堆 SFTP 主机可以连接并应用相同的逻辑。我希望这可以自动完成,而不必为每个 SFTP 主机实现类。


See 动态 ftp 示例 https://github.com/spring-projects/spring-integration-samples/tree/master/advanced/dynamic-ftp。它使用 XML,但同样的技术也适用于 Java 配置。它使用出站适配器;入站有点复杂,因为您可能需要将它们挂接到一个公共上下文中。自述文件中有有关如何执行此操作的链接。

不过我最近回答了一个使用 Java 配置的多个 IMAP 邮件适配器的类似问题 https://stackoverflow.com/questions/32826864/spring-multiple-imapadapter/32827733#32827733然后一个后续问题 https://stackoverflow.com/questions/32890833/message-channels-one-or-many/32891671#32891671.

您应该能够使用那里使用的技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Integration:消除设置 bean 的重复代码 的相关文章

随机推荐

  • oracle - 在 unpivot 查询中查询 NULL 值

    我想从 Oracle DB 中获取记录 其中列值为NULL 我也在使用unpivot在我的查询中 不知何故NULL由于以下原因 值未被选择unpivot关键词 您能帮我了解如何在使用时获取相同的行吗unpivot EDIT SELECT a
  • 将变量传递到 jinja 导入或包含父 html 文件

    场景是 你有一个名为 person 的变量 其中包含许多字段 如姓名 地址等 你想将其传递给部分 html 例如 此解决方案可能是搜索客户的结果 片段 html div ul li span name span span address s
  • 从代码中获取Android WiFi“net.hostname”

    当 Android 设备连接到 WiFi AP 时 它会使用如下名称来标识自己 android cc1dec12345e6054 如何从 Android 应用程序中获取该字符串 不是为了改变它 只是为了读出 EDIT 这是我的路由器网络界面
  • 表单中的 SwiftUI 选择器不显示复选标记

    我在表单中嵌入了一个选择器 但是我无法让它工作 因为它在表单中显示复选标记和选定的值 NavigationView Form Section Picker selection currencyCode label Text Currency
  • Kafka Stream与KTable一对多关系Join

    我有一个卡夫卡流 比如说博客和一个卡夫卡表 比如说与这些博客相关的评论 来自 kafka 流的键可以映射到 Kafka 表中的多个值 即一个博客可以有多个评论 我想将这两个连接起来并创建一个带有评论 id 数组的新对象 但是当我进行连接时
  • 使用 FormBuilder Angular 2 绑定选择列表

    在 Angular 2 中 创建一个简单的应用程序 但是当 formBuilder 在选择列表的情况下附加了 DOM 控件时 第一个选项将变为空白 即使我在 formBuilder 中提供了一些初始值 该值也不会出现在 DOM 元素中 在F
  • 有哪些鲜为人知但有用的数据结构?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 有一些数据结构确实有用 但大多数程序员都不知道 他们是哪些 每个人都知道链表 二叉树和哈希 但
  • Android Google Drive 断点续传经常失败

    我在将 mp4 文件上传到 google 云端硬盘时遇到问题 我正在使用断点续传上传 块大小设置为最小大小的重数 取决于要上传的文件大小以使进度条工作 小文件的上传几乎总是有效 但当文件大约 50 MB 时 上传经常失败 有例外EOFExc
  • 如何在解析android上使用旧密码更改密码

    我有一个 Android 应用程序 用户可以在其中更改他 她的密码 我的问题是如何使用解析验证用户的旧密码 我有 3 个编辑文本 旧密码 新密码和确认新密码 我在 parse com 上搜索 但找不到任何解决方案 解析不使用获取密码获取数据
  • 无法禁用 jinja2 中的自动转义

    在 GAE 中 我将 jinja2 与自动转义一起使用 一切正常 import jinja2 jinja env jinja2 Environment loader jinja2 FileSystemLoader template dir
  • 重新用 R log(Y+1) 表示

    我正在处理一个数据集 我必须生成要动态传递给 lm 的公式 所以 我正在使用重新配制来做到这一点 formula reformulate termlabels c feature1 feature2 feature3 response y
  • 使用 Python 检查电子邮件

    我有兴趣在收到来自特定的电子邮件后触发特定操作 具有特定主题的地址 为了能够做到这一点 我需要实施 监控我的邮箱 检查每封收到的邮件 特别是我使用 gmail 最简单的方法是什么 Gmail 提供通过 POP 连接的功能 您可以在 Gmai
  • WSO2 IS 单点注销部分工作

    我正在使用 WSO2 Identity Server 5 0 0 测试 SAML SSO 并使用两个 PHP 应用程序实例作为服务提供者 使用 onelogin phpsaml 我设法使单点登录正常工作 但现在我面临单点注销的问题 当我从
  • Android视频通话使用android的sip

    我想在android 中开发一个视频通话程序 我想到使用android 2 3 3中引入的内置sip 但如何发起视频通话呢 我看到它不受支持 我相信通用 Android SIP 堆栈支持视频 取自 https developer andro
  • 有没有办法在 flutter 上创建类似可编辑网格的电子表格?

    如果没有可用的 dart 包 如何解决这个问题 您可以复制粘贴运行下面的完整代码您可以使用包https pub dev packages table sticky headers https pub dev packages table s
  • GitHub“无法自动合并”?

    有时 当我尝试将头叉合并到我的基础叉中 或者将我的基础叉合并到头叉中时 我会在 GitHub 上收到以下消息 无法自动合并 别担心 您仍然可以创建拉取请求 如果有冲突的话 我该如何看待 我已经阅读了大约 10 个带有各种命令的不同示例 但我
  • 在 matplotlib 中已知 X 值的曲线上绘制标记

    我根据实验获得的数据绘制了一条关于时间序列的曲线 数据以 10ms 间隔收集 数据是单行数组 我还计算了一个数组 其中包含触发某个设备的时间 我画了这些触发位置的轴线 现在我想在我的曲线与这些轴线相交的地方显示标记 我该怎么做 触发时间 X
  • Android ADB主机设备中ADB设备未授权如何解决?

    当我使用已取得 root 权限的 Android 设备作为 ADB 主机向 Samsung S4 发送 adb 命令 adb devices 时 我收到了设备未经授权的错误消息 然而 当我尝试 adb 到 Samsung Galaxy Ne
  • 使用java将字符串内容传输到远程机器中的文件

    我需要将字符串内容放入远程文件中 理想情况下 我曾经在本地创建一个文件 然后将该文件传输到远程计算机 下面是我用来将文件复制到远程的代码片段 ChannelSftp sftpChannel ChannelSftp channel File
  • Spring Integration:消除设置 bean 的重复代码

    对于我的 SFTP 客户端项目 我使用 spring 集成 我们有不同的客户端 必须连接到不同的 SFTP 服务器 但是 所有逻辑都是相同的 所以我将它们抽象为 AbstractSFTPEndPoint 每个特定于客户端的类都实现 getC