用于数据打包的方法、装置及电子设备转让专利

申请号 : CN201710235637.2

文献号 : CN107085605A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 程惠仙陈林

申请人 : 泰康保险集团股份有限公司

摘要 :

本公开提供一种用于数据打包的方法、装置及电子设备。所述方法包括:根据上一次触发时间和频度触发相应的定时任务;从数据库中抽取所述定时任务对应的待打包数据集;根据所述定时任务的策略参数获取相应的打包策略;根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包。本公开通过上一次触发时间和频度触发定时任务,获取定时任务的待打包数据集,根据预设的打包策略对该待打包数据集进行打包,从而可以实现数据的可配置化打包。

权利要求 :

1.一种用于数据打包的方法,其特征在于,包括:根据上一次触发时间和频度触发相应的定时任务;

从数据库中抽取所述定时任务对应的待打包数据集;

根据所述定时任务的策略参数获取相应的打包策略;

根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包。

2.根据权利要求1所述的用于数据打包的方法,其特征在于,根据上一次触发时间和频度触发相应的定时任务包括:将所述定时任务的上一次触发时间和频度存储于所述数据库中;

根据所述上一次触发时间和所述频度获得所述定时任务的下一次触发时间;

进行时间监控,当当前时间等于所述下一次触发时间时,触发所述定时任务。

3.根据权利要求1所述的用于数据打包的方法,其特征在于,所述方法还包括:根据业务需求,为所述待打包数据集创建打包调度器;

通过所述打包调度器的页面创建所述定时任务及其打包分组策略参数、初始触发时间和频度并保存于所述数据库中。

4.根据权利要求3所述的用于数据打包的方法,其特征在于,所述打包调度器为QuartzJob打包调度器。

5.根据权利要求3所述的用于数据打包的方法,其特征在于,所述打包策略包括分包策略、拆包策略和包命名策略。

6.根据权利要求5所述的用于数据打包的方法,其特征在于,所述包命名策略包括序列重置策略。

7.根据权利要求5所述的用于数据打包的方法,其特征在于,根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包包括:根据所述打包分组策略参数,将具有相同分包策略的所述待打包数据集中的数据分配至同一数据包中;

遍历所述待打包数据集完成所述待打包数据集的分包。

8.根据权利要求7所述的用于数据打包的方法,其特征在于,根据所述打包分组策略参数,将具有相同分包策略的所述待打包数据集中的数据分配至同一数据包中包括:将所述打包分组策略参数封装在HashMap中,并传递至所述定时任务;

将所述打包分组策略参数组成分包策略key;

将具有相同分包策略key的所述待打包数据集中的数据放在同一数据包中。

9.根据权利要求7所述的用于数据打包的方法,其特征在于,根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包还包括:根据所述拆包策略对分包后的数据包进行拆包。

10.根据权利要求9所述的用于数据打包的方法,其特征在于,根据所述拆包策略对分包后的数据包进行拆包包括:根据待发送渠道要求,将数据包的最大笔数限制配置在所述数据库中;

初始化时将配置在所述数据库中的数据包的最大笔数限制加载在缓存中;

拆包时根据所述打包分组策略参数,在所述缓存中取出相应数据包的最大笔数限制,对所述数据包进行拆包处理。

11.根据权利要求9所述的用于数据打包的方法,其特征在于,根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包还包括:根据所述包命名策略对拆包后的数据包创建包号。

12.根据权利要求11所述的用于数据打包的方法,其特征在于,根据所述包命名策略对拆包后的数据包创建包号包括:根据所述打包分组策略参数,在所述数据库中配置命名策略参数、输出规则、拼接顺序以及序列重置策略;

读取所述序列重置策略,判断自定义序列是否需要重置;

根据所述拼接顺序,依次读取命名规则,将各命名规则输出字符串拼接成完整的包号。

13.根据权利要求12所述的用于数据打包的方法,其特征在于,所述包号的命名规则根据待发送渠道要求制定,其包括文件名和/或报文的流水号。

14.根据权利要求11所述的用于数据打包的方法,其特征在于,将打包完成的数据包返回至所述数据库中进行存储。

15.一种用于数据打包的装置,其特征在于,包括:任务触发模块,用于根据上一次触发时间和频度触发相应的定时任务;

数据抽取模块,用于从数据库中抽取所述定时任务对应的待打包数据集;

打包策略获取模块,用于根据所述定时任务的策略参数获取相应的打包策略;

打包调度模块,用于根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包。

16.一种电子设备,其特征在于,包括:

处理器;以及

存储器,用于存储所述处理器的可执行指令;

其中,所述处理器被配置为执行上述权利要求1-14中任意一项所述的用于数据打包的方法。

说明书 :

用于数据打包的方法、装置及电子设备

技术领域

[0001] 本公开涉及计算机技术领域,尤其涉及一种用于数据打包的方法、装置及电子设备。

背景技术

[0002] 现有的资金平台(例如,公司针对财务交易处理、财务核对,使得交易透明化、自动化的平台,有效缩短了公司的资金交易处理时间及成本,同时经过该系统也加强了资金的监管)与各银行及第三方支付进行交易传输(包括实时、批处理的收付款交易,异步的交易结果查询等)时,至少存在以下问题:
[0003] 1、使用TaskTimer创建的任务对象,由于任务的频度及触发时间固定配置在XML文件中,只能配置简单的周期任务。当项目实施中新建任务时,需更改任务周期、更改XML配置、重新加载服务,此类工作非常繁琐且不利于项目长期运维及实施支持。
[0004] 2、数据分类的策略组是全数据共享的,不能为指定的数据集合单独配置策略组,如有数据集合要用不同的策略组,只能在代码里增加特殊规则。
[0005] 3、数据首次分包后,后续的工作,都是放在KEY命名的流程处理类中完成的。每个流程类都配置了处理该包所需的自定义参数,这种面向过程式的写法,如新增渠道都是把原有的流程类COPY一份,涂涂改改,积累了大量冗余的代码,非常不方便维护。
[0006] 因此,需要一种改进的用于数据打包的方法、装置及电子设备。

发明内容

[0007] 为克服相关技术中存在的问题,本公开提供一种用于数据打包的方法、装置及电子设备,实现对定时任务指定范围内的数据集进行打包。
[0008] 根据本公开实施例的第一方面,提供一种用于数据打包的方法,包括:
[0009] 根据上一次触发时间和频度触发相应的定时任务;
[0010] 从数据库中抽取所述定时任务对应的待打包数据集;
[0011] 根据所述定时任务的策略参数获取相应的打包策略;
[0012] 根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包。
[0013] 在本公开的一种示例性实施例中,根据上一次触发时间和频度触发相应的定时任务包括:
[0014] 将所述定时任务的上一次触发时间和频度存储于所述数据库中;
[0015] 根据所述上一次触发时间和所述频度获得所述定时任务的下一次触发时间;
[0016] 进行时间监控,当当前时间等于所述下一次触发时间时,触发所述定时任务。
[0017] 在本公开的一种示例性实施例中,所述方法还包括:
[0018] 根据业务需求,为所述待打包数据集创建打包调度器;
[0019] 通过所述打包调度器的页面创建所述定时任务及其打包分组策略参数、初始触发时间和频度并保存于所述数据库中。
[0020] 在本公开的一种示例性实施例中,所述打包调度器为QuartzJob打包调度器。
[0021] 在本公开的一种示例性实施例中,所述打包策略包括分包策略、拆包策略和包命名策略。
[0022] 在本公开的一种示例性实施例中,所述包命名策略包括序列重置策略。
[0023] 在本公开的一种示例性实施例中,根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包包括:
[0024] 根据所述打包分组策略参数,将具有相同分包策略的所述待打包数据集中的数据分配至同一数据包中;
[0025] 遍历所述待打包数据集完成所述待打包数据集的分包。
[0026] 在本公开的一种示例性实施例中,根据所述打包分组策略参数,将具有相同分包策略的所述待打包数据集中的数据分配至同一数据包中包括:
[0027] 将所述打包分组策略参数封装在HashMap中,并传递至所述定时任务;
[0028] 将所述打包分组策略参数组成分包策略key;
[0029] 将具有相同分包策略key的所述待打包数据集中的数据放在同一数据包中。
[0030] 在本公开的一种示例性实施例中,根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包还包括:
[0031] 根据所述拆包策略对分包后的数据包进行拆包。
[0032] 在本公开的一种示例性实施例中,根据所述拆包策略对分包后的数据包进行拆包包括:
[0033] 根据待发送渠道要求,将数据包的最大笔数限制配置在所述数据库中;
[0034] 初始化时将配置在所述数据库中的数据包的最大笔数限制加载在缓存中;
[0035] 拆包时根据所述打包分组策略参数,在所述缓存中取出相应数据包的最大笔数限制,对所述数据包进行拆包处理。
[0036] 在本公开的一种示例性实施例中,根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包还包括:
[0037] 根据所述包命名策略对拆包后的数据包创建包号。
[0038] 在本公开的一种示例性实施例中,根据所述包命名策略对拆包后的数据包创建包号包括:
[0039] 根据所述打包分组策略参数,在所述数据库中配置命名策略参数、输出规则、拼接顺序以及序列重置策略;
[0040] 读取所述序列重置策略,判断自定义序列是否需要重置;
[0041] 根据所述拼接顺序,依次读取命名规则,将各命名规则输出字符串拼接成完整的包号。
[0042] 在本公开的一种示例性实施例中,所述包号的命名规则根据待发送渠道要求制定,其包括文件名和/或报文的流水号。
[0043] 在本公开的一种示例性实施例中,将打包完成的数据包返回至所述数据库中进行存储。
[0044] 根据本公开实施例的第二方面,提供一种用于数据打包的装置,包括:
[0045] 任务触发模块,用于根据上一次触发时间和频度触发相应的定时任务;
[0046] 数据抽取模块,用于从数据库中抽取所述定时任务对应的待打包数据集;
[0047] 打包策略获取模块,用于根据所述定时任务的策略参数获取相应的打包策略;
[0048] 打包调度模块,用于根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包。
[0049] 根据本公开实施例的第三方面,提供一种电子设备,包括:
[0050] 处理器;以及
[0051] 存储器,用于存储所述处理器的可执行指令;
[0052] 其中,所述处理器被配置为执行上述任意一项所述的用于数据打包的方法。
[0053] 本公开示例实施方式中的用于数据打包的方法、装置及电子设备,通过上一次触发时间和频度触发定时任务,获取定时任务的待打包数据集,根据预设的打包策略对该待打包数据集进行打包,从而可以实现数据的可配置化打包。

附图说明

[0054] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0055] 图1是根据一示例性实施例示出的一种用于数据打包的方法的流程示意图。
[0056] 图2是根据一示例性实施例示出的一种用于数据打包的方法的系统架构示意图。
[0057] 图3是根据一示例性实施例示出的一种打包调度器的页面示意图。
[0058] 图4是根据图3所示的打包调度器输入执行周期表达式的页面示意图。
[0059] 图5是根据一示例性实施例示出的一种作业列表的页面示意图。
[0060] 图6是根据一示例性实施例示出的一种用于数据打包的装置的模块示意图。

具体实施方式

[0061] 现在将参考附图更全面地描述示例性实施例。然而,示例性实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施方式;相反,提供这些实施方式使得本公开将全面和完整,并将示例性实施例的构思全面地传达给本领域的技术人员。在图中,相同的附图标记表示相同或类似的结构,因而将省略它们的详细描述。
[0062] 此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而没有所述特定细节中的一个或更多,或者可以采用其它的模块、步骤等。在其它情况下,不详细示出或描述公知结构以避免模糊本公开的各方面。
[0063] 图1是根据一示例性实施例示出的一种用于数据打包的方法的流程示意图。
[0064] 参考图1中所示,本示例实施方式中首先提供了一种用于数据打包的方法,可以包括以下步骤。
[0065] 在步骤S100中,根据上一次触发时间和频度触发相应的定时任务。
[0066] 在示例性实施例中,所述方法还可以包括:根据业务需求,为所述待打包数据集创建打包调度器;通过所述打包调度器的页面创建所述定时任务及其打包分组策略参数、初始触发时间和频度并保存于所述数据库中。
[0067] 在示例性实施例中,所述打包调度器可以为QuartzJob打包调度器。但本公开并不限定于此,这里仅是一个举例说明。
[0068] QuartzJob是一个纯Java实现的作业调度工具,相当于数据库中的Job、Windows的计划任务、Unix/Linux下的Cron,但Quartz可以把排程控制的更精细,比起项目改版前的TaskTimer灵活方便了很多。
[0069] 图3是根据一示例性实施例示出的一种打包调度器的页面示意图。图4是根据图3所示的打包调度器输入执行周期表达式的页面示意图。图3中以创建交行银保通的QuartzJob打包调度器为例进行说明,在该打包调度器的页面中可以输入打包分组策略参数及如图4所示的执行周期表达式(初始触发时间及频度)。如上图4所示,就创建了一个永久的交保通集合打包调度,分配了分包策略组,并且每隔5分钟执行一次。
[0070] 本发明实施例中,根据业务提出的需求,为指定范围内的待打包数据集合创建QuartzJob打包调度器(例如,可以通过页面化创建,类似填写表单),输入打包分组策略参数(现有一般是需要银行或第三方支付机构代码、收/付方向、时效、每包数量、频度等,当然本公开不限定于此),根据QuartzTrigger表达式定制调度器的执行时间(触发时间)及周期(频度)。打包调度器创建后,除非后期业务有变更,否则不需人工干涉程序,会一直周期执行。
[0071] 在示例性实施例中,根据上一次触发时间和频度触发相应的定时任务包括:将所述定时任务的上一次触发时间和频度存储于所述数据库中;根据所述上一次触发时间和所述频度获得所述定时任务的下一次触发时间;进行时间监控,当当前时间等于所述下一次触发时间时,触发所述定时任务。即本发明实施例中,各任务的触发时间和频度的配置不是固定放在XML文件中的,而是将各任务的上一次触发时间和配置的频度存储到数据库中,进行时间监控时,从数据库中读取该任务的上一次触发时间和配置的频度,从而可以计算出下一次触发时间,并根据该下一次触发时间判断当前时间是否触发该任务。且QuartzJob新建任务可以通过页面完成,类似于填写普通表单,不在后台进行代码的编写。这样,就可以克服现有技术中新建任务时则需更改任务周期、更改XML配置、重新加载服务诸如此类的繁琐工作,并克服了现有技术中不利于项目长期运维及实施支持的技术问题。
[0072] 图5是根据一示例性实施例示出的一种作业列表的页面示意图。如图5所示,上一次触发时间和下一次触发时间之差表示该定时任务(调度任务)自动触发的频度。在其他实施例中,也可以选中其中一条定时任务,点击执行就可以手动触发该任务。因此,本发明实施例使用QuartzJob调度器比起TaskTimer更加灵活,可以自由选择手动执行或自动执行。
[0073] 本发明实施例中可以实现可配置化调整定时任务的频度、数量及任务流程。
[0074] 在步骤S110中,从数据库中抽取所述定时任务对应的待打包数据集。
[0075] 在步骤S120中,根据所述定时任务的策略参数获取相应的打包策略。
[0076] 打包策略是资金平台打包的一个总体抽象流程,作用是提高代码复用行、降低冗余和耦合。每一个调度作业都是打包策略的具体实现。
[0077] 在示例性实施例中,所述打包策略包括分包策略、拆包策略和包命名策略。
[0078] 在示例性实施例中,所述包命名策略包括序列重置策略。
[0079] 本发明实施例的设计模式如下:代码层面上引用了策略模式、工厂模式以及单例模式,把冗余的业务代码全部去除了,只保留分包策略、拆包策略、包命名策略及序列重置策略。各业务处理类都用接口的形式,把类名配置在数据库中,在项目首次引用时用工厂+懒加载的模式获取类对象,首次加载后,用单例模式+spring的事物保障打包工作的原子性。即将业务流程配置在数据库中,将类似的处理流程抽象成抽象处理流程,当来源数据调用策略组时,系统会加载该来源数据所对应的策略组并实例化,进而处理来源数据。当该组来源数据被实例了的策略组处理时,不会被其他策略组调用处理,各个处理组都是相对独立的。
[0080] 其中,上述的策略模式是指定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。将多个不同的数据操作抽象出多个流程。
[0081] 上述的工厂模式是指根据来源数据创建后续流程。
[0082] 上述的单例模式是指同一时间,只能运行一个该流程被创建和使用。
[0083] 上述的分包策略是把业务允许放在一个批处理的数据根据规定的策略抽取出来。分包策略是指按照业务系统的要求对来源数据进行第一步的筛选。
[0084] 上述的拆包策略是指分包策略后抽取的数据再根据银行或第三方支付机构的要求(及策略)拆分成符合对端每次请求所要求的数据格式。
[0085] 上述的包命名策略是根据资金平台与银行和/或第三方支付机构的约定,每发给银行或第三方支付机构的数据都含有包名,这些包名就是区分、表明资金平台上每笔交易的唯一流水号。
[0086] 上述的序列重置策略是指根据包命名策略命名后的包名,其自定义序列部分可以有重复,因此,需要对其进行检查,当重复时,将其进行重置。
[0087] 在步骤S130中,根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包。
[0088] 整个打包调度作业可以分为三步骤完成:分包、拆包、包命名。下面分别对其进行说明。
[0089] 在示例性实施例中,根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包包括:根据所述打包分组策略参数,将具有相同分包策略的所述待打包数据集中的数据分配至同一数据包中;遍历所述待打包数据集完成所述待打包数据集的分包。
[0090] 当数据由其他渠道(例如各业务系统)进入资金平台时,第一次落地(存储到数据库中)会根据数据的来源、金额、收/付交易等属性去匹配策略组。策略组类似于工作流的流程,为根据已知的业务场景提炼到的规则,当新数据匹配到策略组,这笔数据所要流转的流程已经确定。本发明实施例中可以采用面向对象的写法。新增渠道把需要的数据配置写在数据库中,代码中用适配器模式去实现。
[0091] 在示例性实施例中,根据所述打包分组策略参数,将具有相同分包策略的所述待打包数据集中的数据分配至同一数据包中包括:将所述打包分组策略参数封装在HashMap中,并传递至所述定时任务;将所述打包分组策略参数组成分包策略key;将具有相同分包策略key的所述待打包数据集中的数据放在同一数据包中。
[0092] 在示例性实施例中,根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包还包括:根据所述拆包策略对分包后的数据包进行拆包。
[0093] 在示例性实施例中,根据所述拆包策略对分包后的数据包进行拆包包括:根据待发送渠道要求,将数据包的最大笔数限制配置在所述数据库中;初始化时将配置在所述数据库中的数据包的最大笔数限制加载在缓存中;拆包时根据所述打包分组策略参数,在所述缓存中取出相应数据包的最大笔数限制,对所述数据包进行拆包处理。
[0094] 对分包后的每个包进行二次拆包。每个数据包都有最大笔数的限制,根据待发送的渠道要求都不一样,最大笔数限制配置在数据库中,项目初始化时加载到缓存里,拆包时会根据分包策略key,在缓存里取出最大笔数限制,进行二次拆包处理。例如渤海银行每包最大数量是2000,而保融每包最大数量是10000,渤海银行和保融都是第三方支付机构。在其他实施例中,可以根据第三方的报文及盘文件限制每隔数据包的最大笔数数量,从而根据各数据包的最大笔数限制进行二次拆包。
[0095] 在示例性实施例中,根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包还包括:根据所述包命名策略对拆包后的数据包创建包号。
[0096] 在示例性实施例中,根据所述包命名策略对拆包后的数据包创建包号包括:根据所述打包分组策略参数,在所述数据库中配置命名策略参数、输出规则、拼接顺序以及序列重置策略;读取所述序列重置策略,判断自定义序列是否需要重置;根据所述拼接顺序,依次读取命名规则,将各命名规则输出字符串拼接成完整的包号。
[0097] 在示例性实施例中,所述包号的命名规则根据待发送渠道要求制定,其包括文件名和/或报文的流水号。
[0098] 每个数据包(二次拆包之后的数据包)都需要创建包号,包号的命名规则主要以待发送渠道的要求为主。可以为文件名,或者是报文的流水号(例如,通联渠道的包名与FTP文件名相同,工商银行的单笔实时交易的包名就是报文的流水号)。根据每个分包策略key,在数据库配置了完整的命名策略参数(不同命名策略对应的包命名方法,命名策略是各渠道要求包命名规则的策略集合)、输出规则、拼接顺序以及序列重置策略等。先读取序列重置策略,决定自定义序列是否重置。然后根据拼接顺序,依次读取命令规则,将各规则输出字符串拼接成完整的包名。其中,这个包名经过资金平台和银行或第三方支付机构讨论过后的包名命名标准,作用是为了保证包号的独一无二(全局绝对独立)和银行或第三方支付机构和资金平台处理方便。
[0099] 还是以图3为参考,在示例的招行银保通渠道的开发中,服务方规定发盘文件命名:类型标识_机构代码(4位)_日期(8位)_自定义序号(5位),根据资金平台的业务架构,需要把该数据集合包(即数据包,待发送的业务数据集合)命名为文件名。
[0100] 其中,上述的类型标识可以有4种业务类型,例如101-对公付款,102-对私付款,103-对公收款,104-对私收款。但本公开不限定于此。
[0101] 分析需要调用的打包命名策略。命名策略可以配置在BE_SEQRULE表(打包策略表,保存在数据库中)中,如下表一所示。
[0102]
[0103] 表一
[0104] 其中,表一中的PART_NUM表示拼接顺序;PART_CLASS表示需要调用的命名策略序号;PART_VALUE表示命名策略方法调用参数;
[0105] PART_LENGTH表示命名参数返回串长度,字符串不够补_,数字不够补0。
[0106] 下面以一段示例性程序为例进行说明:
[0107]
[0108]
[0109] 例如,PART_CLASS=2,调用Case 2:获取当前八位日期partValue=ToolUtil.getNowDate();PART_CLASS=5是读取序列表,获取当前序列。最终的输出包号:101_110Z_20161014_000001(示例)。
[0110] 现有的包命名策略已经很完善了,满足绝大部分渠道的打包需求,如遇上特殊的需求,代码层面只需要新增命名策略以及序列重置策略,就是增加抽象策略的配置。业务参数(一般包括银行或第三方支付机构代码、收付方向、时效、每包数量、频度等,但不限于这些,具体情况有时还需具体分析)的配置信息由运维团队完成即可。
[0111] 在示例性实施例中,将打包完成的数据包返回至所述数据库中进行存储。
[0112] 本发明实施方式提供的用于数据打包的方法,代码专注写各种策略(分包策略、拆包策略、包命名策略及序列重置策略),业务参数(来源系统、收/付方向,去向的银行或第三方支付机构等)都配置在数据库中,实现了功能模块与业务的低耦合,可以扩展更多的业务。后期策略完善后,新增业务只需交给运维团队在数据库中做配置即可(可手工干预数据库,也可以页面化新增策略组)。一方面,解决了资金平台与银行及第三方支付公司交易打包差异性(包括包命名规则、每包数量、收付方向等第三方支付机构和银行所要求的包号命名规范,以及资金平台对包名的命名标准等)、开发过程中代码冗余性、可扩展性及兼容性比较弱的问题;另一方面,提升了开发效率、代码重复率及后期项目运维成本并且降低了开发风险。
[0113] 图2是根据一示例性实施例示出的一种用于数据打包的方法的系统架构示意图。
[0114] 打包调度器进行时间监听,查找当前时间点有触发任务的触发器。
[0115] 其中,调度器Scheduler在启动的时候会开启一个线程Thread,Thread会不停循环的根据当前时间到数据库查询该时间点会触发作业的活动的触发器Trigger。任务调度是指设置固定的时间点、时间间隔或者执行次数自动执行任务。定时任务是在指定时间点或一个日期范围内以指定的周期按指定的频率自动被调起的任务,它的调度执行无需人工干预,按来源主要分为两类,一类是联机交易时根据交易环境预约的任务,一类是项目上线时直接预埋在数据库的任务。
[0116] 响应触发指令,将数据库中待实例化的定时任务数据实例化为定时任务实例,并存储至数据库。
[0117] 具体地,这里的触发条件可以为:按照预设的扫描周期,扫描数据库中是否存在定时任务数据,若发现存在定时任务数据,则确定满足触发指令。
[0118] 定时任务数据只有被实例化为具体的定时任务实例支行才能够进行后续的处理。定时任务实例化的过程中,需要参考任务周期数据及系统当前时间,生成一条定时任务实例,并将生成的定时任务实例存储至数据库中。例如一个周期任务为每天17点批量付款,当前时间为11月1日8点,则生成一条执行时间为11月1日17点的定时任务实例。
[0119] 然后,调起数据库中待执行的定时任务实例。
[0120] 具体地,与上述触发指令相似的,按照预设的扫描周期,扫描数据库中是否存在定时任务实例,若发现存在定时任务实例,则调用Spring-batch框架的JOB执行所述待执行的定时任务实例。
[0121] 定时任务实例开始执行后,资金平台从数据库(例如,db2)中获取待打包数据集。
[0122] 接着,从分包调度作业缓存中获取相应的打包策略,对所述待打包数据集执行分包调度作业。
[0123] QuartzJob调度器创建的打包分组策略参数可以封装在HashMap(但本公开并不限定于此)里,传递到JOB(实例后的任务,也就是需要执行的任务)中。通过SpringJdbc(可以理解为数据库交互,从数据库中获取待打包数据集)获取待打包数据集,业务层将策略参数组成key(例如,一种分包策略一个编号,方便系统快速获取),具有相同key的数据集合放到一个list(一个带序号的集合)里面。遍历全部业务数据(全部业务数据等于所有待打包数据)完成第一次分包(即图2中的分组,将使用相同分包策略的数据分在同一组)。
[0124] 接着,根据第三方(银行或第三方支付机构)的限制,对分包后的数据包进行二次拆包。这里二次拆包后的包的数量不会小于1。其中每个包中1条指令就是一笔待转账的交易明细。
[0125] 其次,对拆包后的数据包进行数据落地。其中数据落地就是数据存储到db2数据库的指令表。
[0126] 在图2所示的实施例中,还可以包括:将指令(例如,业务系统发出的业务指令)与包信息落地,且使本包处于待发送状态。
[0127] 目前开发完的各种策略很完善,足以满足绝大部分的渠道需求。如果有特殊需求,开发团队只需增加对应的策略即可。整个模块变得很清爽,扩展性非常的强。对于亲上手同事在不接触代码的情况下,理解各种策略,即能通过页面化操作独立完成新增渠道的打包调度作业或修改原有的打包调度作业,极大缩短了后期的开发及维护工作。
[0128] 图6是根据一示例性实施例示出的一种用于数据打包的装置的模块示意图。
[0129] 本示例实施方式中还提供了一种用于数据打包的装置10,可以包括:任务触发模块100、数据抽取模块110、打包策略获取模块120以及打包调度模块130。
[0130] 其中任务触发模块100可以用于根据上一次触发时间和频度触发相应的定时任务。
[0131] 数据抽取模块110可以用于从数据库中抽取所述定时任务对应的待打包数据集。
[0132] 打包策略获取模块120可以用于根据所述定时任务的策略参数获取相应的打包策略。
[0133] 打包调度模块130可以用于根据所述打包策略对所述待打包数据集执行打包调度作业,完成所述待打包数据集的打包。
[0134] 关于上述用于数据打包的装置,其中各个模块执行操作的具体方式已经在有关用于数据打包的方法的示例性实施例中进行了详细描述,此处将不做详细阐述说明。
[0135] 本示例实施方式中还提供了一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令。其中,所述处理器可以被配置为执行上述任意实施例中所述的用于数据打包的方法。
[0136] 以上所述仅为本公开的部分示例性实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。