Spring批处理和集成

Posted

技术标签:

【中文标题】Spring批处理和集成【英文标题】:Spring batch and Integration 【发布时间】:2011-05-13 20:01:16 【问题描述】:

我是 Spring 的初学者,我必须为学校做一个项目。我可以做什么样的项目,我可以使用 Spring Batch 和 Integration。我知道我可以将文件写入目录,写入、读取和修改逗号分隔的文件,但我无法想象可以结合这些技术的场景。

【问题讨论】:

【参考方案1】:

我自己不是 Spring 或 Spring Batch 或 Spring Integration 方面的专家,但我可以告诉你一个实际任务,我必须在我的组织中完成使用所有这些来满足需求。

我的公司在客户注册时从他们那里收取信用卡,并每 30 天向他们收取费用。因此,我们每天都必须查看谁在第 30 天,并通过向他们收费来自动更新我们的服务。因此,我必须每天将数据发送到银行。

步骤:1 我必须编写一个程序,通过批处理程序从我们的安全数据库中获取客户当天到期的信用卡详细信息,并以银行所需的特定格式编写此内容以“.txt”文件的形式放入我们公司服务器中的临时位置(例如:/user/someuser/endofdaytransaction/dd-mm-yyyy.txt)

步骤:2 只要此目录 (/user/oneworld/endofdaytransaction/) 中有内容 (dd-mm-yyyy.txt),我就必须连接到银行的 SFTP 服务器并将文件转移到银行提供给我们的目录中。

我在 Step: 1 中使用 Spring Batch,批处理作业在每天下午 5 点通过 Quartz 调度程序触发,在 Step: 2 中使用 Spring Integration 继续轮询目录,一旦找到文件,将其转移到银行。

我也从Spring文档中看到,我可以对这些技术进行mashup,即可以避免写入临时目录,并要求Spring Integration直接写入银行的SFTP服务器。

我能想到的其他实际示例:我拥有 AT&T 并订阅了自动付款,即他们每 30 天向我收费,并保持我的互联网和电话服务处于活动状态。我已向 AT&T 提供了我的银行信用卡详细信息。他们汇总所有要计费的信用卡(订户),并将数据发送到需要在每天特定时间作为批处理文件计费的 VISA 或 MASTERCARD。我希望你能与我提到的第 1 步和第 2 步联系起来。学习愉快!

【讨论】:

您使用哪个库将文件上传到银行的 SFTP 服务器?【参考方案2】:

但我无法想象可以结合这些技术的场景

好吧,让我们以一家需要大量批处理作业的大型公司为例 通过 spring 集成,您可以设置一个系统来

管理批处理作业 根据资源规划作业(例如在特定时间窗口运行批处理作业,以免中断在线业务) 只需启动/停止作业 提供作业状态视图

其实只是

调度 报告 管理

通过许多企业消息概念 见http://www.eaipatterns.com/它已经链接到http://www.springsource.org/spring-integration

对于您的范围 - 学校项目 - 如果您确实有一些工作(3 个或更多),那么您可以构建一个批处理启动工具,一个 GUI (spring mvc),它提供启动/停止/监控/查看的按钮这些工作的报告,但我认为这是一个非常大的项目,很容易跨越很多人周

【讨论】:

Spring batch admin docs.spring.io/spring-batch-admin 现在可用于通过 gui 管理批处理作业【参考方案3】:

SpringSource 博主 Dave Syer 有一个很好的整合两者的例子(不是双关语):PRACTICAL USE OF SPRING BATCH AND SPRING INTEGRATION

【讨论】:

【参考方案4】:

让我们想象一下,您正在为一个健康维护组织 (HMO) 构建一个健康系统。这样的系统可能有以下要求:

    对于一年多未接受健康检查的患者,请发送电子邮件和/或短信提醒他们需要检查。

    为鼓励患者进行健康检查,请在电子邮件或短信中允许“回复”功能,通知接待员致电安排预约。

    对于那些需要定期随访的慢性病患者,也可以通过电子邮件或短信发送给他们。

    每周都缠着病人,直到他们得到彻底的检查,但为了理智,不会比这更频繁。

显然,这样的健康系统会有一个数据库来跟踪患者,它可能有一个像这样的表:

CREATE TABLE patient
(
    patient_id  INTEGER,
    first_name  VARCHAR2(255) NOT NULL,
    last_name   VARCHAR2(255) NOT NULL,
    last_checkup_date   DATE,
    follow_up_days  INTEGER
    email_address   VARCHAR2(255),
    mobile_nbr      VARCHAR2(255),
    last_notify_date DATE,
    PRIMARY KEY(patient_id)
);

对于文本消息,这是 JMS 的理想情况。您可以使用 HornetQ、RabbitMQ、ActiveMQ 或许多其他工具。

现在,停下来想一想,如果您要使用纯 Java 编写这些代码,您必须编写的所有代码。对于我刚才提到的需求,你可以不用一行 Java 代码来编写这个应用程序。

【讨论】:

以上是关于Spring批处理和集成的主要内容,如果未能解决你的问题,请参考以下文章

Spring批处理集成

Spring 批处理作业应仅在 Spring 集成轮询器之后执行一次

当所有其他消息完成处理时,Spring集成处理消息

Spring批量管理升级

Spring 批处理作业应仅在 Spring 集成文件轮询器轮询文件后执行一次

Spring集成消息处理链的用法?