一种基于SpringBoot的Java作业处理方法与流程
未命名
09-07
阅读:149
评论:0
一种基于springboot的java作业处理方法
技术领域
1.本发明涉及银行业务处理领域,尤其涉及一种基于springboot的java作业处理方法。
背景技术:
2.在银行业务场景中,经常需要处理大量数据和复杂业务,此特点决定了它需要大量的定时任务来满足需求,如定时生成账单、交易信息通知、批量执行交易、批量进行还款、批量核对数据等,这些定时任务通常对应了两大类java作业:普通作业和文件批处理作业。普通作业配合监控调度软件定期处理数据,优化业务流程。文件批处理作业有效的缓解数据库负载压力,提高数据的处理效率,增加系统稳定性。在这种java作业和监控调度软件结合使用的业务背景下,需要解决并发控制、事务处理、通用性问题。
技术实现要素:
3.鉴于上述问题,提出了本发明以便提供克服上述问题或者至少部分地解决上述问题的一种基于springboot的java作业处理方法。
4.根据本发明的一个方面,提供了一种基于springboot的java作业处理方法,所述作业处理方法包括:
5.根据场景采用对应的作业处理方案;
6.将大量数据拆分为多个任务,采用多线程处理数据;
7.采用多种方式进行事务控制处理;
8.从输入文件中读取数据,转换为可用于进一步处理的格式,对处理后的数据进行计算,将计算结果保存到数据库或另一个输出文件中;
9.在引入作业处理的依赖包时,利用spring生态系统的自动装配帮助快速配置和设置应用程序;
10.采用心跳检测确定服务是否可用,及时捕捉到问题并解决;
11.进行集群部署。
12.可选的,所述根据场景采用对应的作业处理方案具体包括:
13.单步作业,包括一个处理任务,用于单个文件的处理、转换或验证;
14.多步作业包括多个处理步骤,每个步骤独立执行或依次执行,用于多文件的处理、转换或验证;
15.流程作业,按照用户定义的流程控制指定条件来执行;
16.分页作业,将大量数据分页处理,每次处理一个固定大小的数据页,直到处理完整个数据集;
17.分段作业,将数据集分成多个段来处理的,每个段因子数目固定,每个因子单独被处理。
18.可选的,所述将大量数据拆分为多个任务,采用多线程处理数据具体包括:
19.作业拆分成多个步骤;
20.采用线程池处理任务;
21.在多线程处理作业过程中遇到并发问题,采用并发控制机制;
22.通过缓存机制避免重复计算和重复i/o操作,读取器和写入器支持预取机制,能够在一次读/写时,预取多条数据。
23.可选的,所述采用多种方式进行事务控制处理具体包括:
24.单个事务控制整个作业;
25.多个task的事务控制;
26.在step中使用分片技术,将大型数据集拆分成小型数据集;
27.逐条记录控制事务;
28.批处理中使用多线程。
29.可选的,所述从输入文件中读取数据,转换为可用于进一步处理的格式,对处理后的数据进行计算,将计算结果保存到数据库或另一个输出文件中具体包括:
30.输入文件格式和结构:需要支持多种文件格式和结构;
31.数据转换逻辑,将输入文件中的数据转换为符合业务需求的格式;
32.数据批量处理;
33.建立多种异常处理策略。
34.可选的,所述在引入作业处理的依赖包时,利用spring生态系统的自动装配帮助快速配置和设置应用程序具体包括:
35.明确需要封装的作业处理程序的功能及其实现方式;
36.根据业务需求,设计清晰、易于使用的组件接口;
37.将作业处理程序的核心模块进行封装,并转化为组件的形式;
38.根据组件要求,对作业处理程序封装的核心模块进行扩展和优化;
39.使用springboot框架,将作业处理组件进行集成和管理。
40.可选的,所述采用心跳检测确定服务是否可用,及时捕捉到问题并解决具体包括:
41.客户端向服务器发送心跳包;
42.服务器收到心跳包并处理;
43.客户端收到响应,并更新自身状态;
44.重复周期性地发送心跳包。
45.本发明提供的一种基于springboot的java作业处理方法,所述作业处理方法包括:根据场景采用对应的作业处理方案;将大量数据拆分为多个任务,采用多线程处理数据;采用多种方式进行事务控制处理;从输入文件中读取数据,转换为可用于进一步处理的格式,对处理后的数据进行计算,将计算结果保存到数据库或另一个输出文件中;在引入作业处理的依赖包时,利用spring生态系统的自动装配帮助快速配置和设置应用程序;采用心跳检测确定服务是否可用,及时捕捉到问题并解决;进行集群部署。提高了整个系统的工作效率。
46.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
47.为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还根据这些附图获得其它的附图。
48.图1为本发明实施例提供的多线程处理流程图;
49.图2为本发明实施例提供的心跳检测方法流程图。
具体实施方式
50.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
51.本发明的说明书实施例和权利要求书及附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元。
52.下面结合附图和实施例,对本发明的技术方案做进一步的详细描述。
53.作业处理方案
54.为了能够适应不同的作业处理场景,提供最适合的解决方案,对于不同的场景需要采用不同的作业处理方案,以提高作业执行的执行效率和可靠性。以下是一些作业类型对应处理方案:
55.单步作业只包含一个处理任务,可用于单个文件的处理、转换或验证等简单操作。例如,将一个文件从一个文件目录移动到另一个文件目录。
56.多步作业包含多个处理步骤,每个步骤独立执行或依次执行,它通常用于多文件的处理、转换或验证等复杂操作,例如,从多个文件源目录获取数据,把数据转换为另一种格式,并将结果写入不同的文件目录。
57.流程作业由一系列有序的步骤或流程组成,这些步骤或流程按照用户定义的流程控制指定条件来执行。例如,金融领域的信用卡欺诈检测流程,读取数据并清洗,基于预处理后的数据集训练机器学习模型,将训练好的模型对交易数据进行预测和验证,将欺诈交易的结果输出存储。
58.分页作业通过将大量数据分页处理,每次处理一个固定大小的数据页,直到处理完整个数据集。在处理每个数据页时,会先将数据集合取出,将数据分页处理,并将结果保存回原始数据集合中。例如,大文件处理作业,通过分页技术拆分大型文件,使其适合于每次处理一部分数据,以避免内存问题。
59.分段作业是将大规模的数据集分成多个段来处理的,每个段因子数目固定,每个因子单独被处理。将数据分成多个段后,每个段在不同的进程中独立处理。例如,大批量数据处理,分段技术将数据拆分为较小的“块”,以便分段地并发处理获得更好的性能。
60.如图1所示,多线程处理方案,作业处理通常会遇到需要处理大量数据的情况,这时单线程处理会变得非常耗时,将大量数据拆分为多个任务,采用多线程处理大大提高批处理的效率。我们需要考虑以下设计思路:
61.作业拆分成多个步骤,对于需要处理大量数据的作业,为了避免单线程处理的性
能问题,将作业拆分成多个独立的步骤。每个步骤都有一个独立的任务,互相独立,并行执行。
62.采用线程池处理任务,为了利用多线程并行执行任务,采用线程池进行任务处理,我们需要选择合适的任务执行器,
63.配置好线程池大小、核心线程数、最大线程数等参数适应作业负载。
64.并发控制,在多线程处理作业过程中会遇到并发问题,比如需要多个线程同时读写同一个文件、进行同一个资源的修改等。为了避免这些问题,考虑以下并发控制机制:
65.分片处理:将大量数据集合按指定大小分成多个小分片,每个线程可并行处理指定数量的分片数据,最终合并整个作业的所有分片处理结果。
66.分段处理:将输入数据分为多个连续的段,每个线程并行处理一个独立的段,最终组合各自处理的结果。
67.分区处理:在分布式环境中,多个节点并行处理各自的数据分区,是数据的水平或者垂直切片。
68.高效性能,在采用多线程处理作业的过程中,还需要注意到提高效率,以充分利用多线程的特性优势。
69.通过缓存机制避免重复计算和重复i/o操作,还有读取器和写入器支持预取机制,能够在一次读/写时,预取多条数据,以减少i/o操作的次数。
70.事务处理方案
71.在批处理过程中,事务处理能够保证数据的原子性和一致性,保证被处理的数据的正确性和可靠性。我们通过多种方式进行事务控制:
72.单个事务控制整个作业:在整个java作业中使用单个事务进行控制,使用spring的事务管理器来进行配置和实现。这样保证整个作业的原子性,如果一个步骤执行失败,整个事务将回滚。
73.多个task的事务控制:将java作业分解为多个task,并使用多个task共享同一个事务,以保证数据一致性。在此方案下,所有task都位于同一个事务之内,并且所有task执行成功,整个事务才能提交,其中任何一个task执行失败,整个事务将回滚。通过定义事务传播属性实现。
74.避免长时间事务:长时间事务会占用数据库资源,导致性能下降。为了避免这种情况,建议在step中使用分片技术,将大型数据集拆分成小型数据集,并尽量减少单个事务的执行时间。
75.逐条记录控制事务:需要对每个记录进行单独的事务处理。在此方案下,每条记录在一个独立的事务中运行,以保证数据的一致性。
76.批处理中使用多线程:在批处理中使用多线程来提高处理速度。其中,多个线程并行执行,并共享一个事务空间,这样在大数据处理任务中提高效率,但可能会增加数据一致性的挑战。
77.文件转换方案
78.在批量处理应用程序中,通常需要从输入文件中读取数据,然后将其转换为可用于进一步处理的格式,程序对这些处理后的数据进行计算,最后将其保存到数据库或另一个输出文件中。文件读取和转换常依赖以下因素:
79.输入文件格式和结构:需要支持多种文件格式和结构,例如txt、xlsx、csv、xml和json等,我们需要选择合适的reader和配置其参数,例如字段分隔符、文本编码等,以正确读取和解析文件中的数据。
80.数据转换逻辑:需要将输入文件中的数据转换为符合业务需求的格式,包括数据清洗、数据转换和数据验证等处理过程。
81.数据批量处理:文件中的数据可能非常大,需要批量处理以提高性能,通过调整块的大小、并行处理等方式来提高处理性能。
82.异常处理:在文件读取和转换的过程中,可能会发生各种异常情况,例如文件格式错误、数据转换错误等,需要考虑提供多种异常处理策略,例如跳过无用数据、重试处理等。
83.组件封装方案
84.在引入作业处理的依赖包时,利用spring生态系统的自动装配帮助快速配置和设置应用程序,使开发人员能够集中精力于业务逻辑的实现。封装成组件涉及以下方面:
85.分析业务需求:明确需要封装的作业处理程序的功能及其实现方式,包括数据读取、处理、输出、异常处理、事务处理等方面。
86.设计组件接口:根据业务需求,设计清晰、易于使用的组件接口,以方便组件的调用和使用者的集成。
87.封装核心模块:将作业处理程序的核心模块进行封装,并将其转化为组件的形式,以便于组件的复用和调用,包括封装job、step、reader、processor、writer等模块组件。
88.实现定制化的功能:根据组件要求,对作业处理程序封装的核心模块进行扩展和优化,以满足实际业务需求,包括增加自定义reader、processor、writer、实现分批导入、实现数据校验等自定义业务需求。
89.使用springboot框架:使用springboot框架,将作业处理组件进行集成和管理。通过springboot框架的自动化配置,大大简化开发流程。
90.如图2所示,心跳检测方案
91.随着服务之间的依赖关系越来越复杂,也更容易出现故障,一种简单有效的方式就是通过心跳检测确定服务是否可用,从而及时捕捉到问题并尽早解决。以下是心跳检测的实现方案:
92.客户端向服务器发送心跳包。
93.在实现时,客户端会周期性地向服务器发送心跳包。心跳包通常包含设备标识符、当前时间和一些其他的元数据,以便服务器能够确定设备的状态。
94.服务器收到心跳包并处理。
95.一旦服务器收到心跳包,它会检查包的有效性。如果包是有效的,服务器将更新设备的状态并将该设备标记为处于活动状态,否则服务器将视为设备失去了连接,或者出现了错误,并将该设备标记为离线状态。
96.客户端收到响应,并更新自身状态。
97.当服务器收到心跳包并对其进行了处理时,服务器会返回响应,此时客户端也需要根据响应的结果更新自身的状态。如果服务器返回的响应表示设备仍然处于活动状态,则客户端将自身标记为处于活动状态,否则客户端将被标记为离线状态。
98.重复周期性地发送心跳包。
99.这个过程是周期性的,它会反复进行直到设备生命周期结束。这样让服务器不断地更新任务节点的状态,以确保在任何时候,每个任务节点都处于可用状态时,状态不过期。
100.有益效果:通过分段技术、分页技术、多线程异步处理等手段来优化作业处理的效率。
101.实现异常处理、自动重试、错误恢复等机制来保证作业执行的可靠性和稳定性。
102.支持分布式锁、心跳检测、容错机制等分布式策略解决集群模式下作业资源竞争问题,保证系统一致性和可用性。
103.基于springboot框架,将线程池配置和作业处理逻辑封装为starter,简化操作,降低使用成本。
104.以上的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
技术特征:
1.一种基于springboot的java作业处理方法,其特征在于,所述作业处理方法包括:根据场景采用对应的作业处理方案;将大量数据拆分为多个任务,采用多线程处理数据;采用多种方式进行事务控制处理;从输入文件中读取数据,转换为可用于进一步处理的格式,对处理后的数据进行计算,将计算结果保存到数据库或另一个输出文件中;在引入作业处理的依赖包时,利用spring生态系统的自动装配帮助快速配置和设置应用程序;采用心跳检测确定服务是否可用,及时捕捉到问题并解决;进行集群部署。2.根据权利要求1所述的一种基于springboot的java作业处理方法,其特征在于,所述根据场景采用对应的作业处理方案具体包括:单步作业,包括一个处理任务,用于单个文件的处理、转换或验证;多步作业包括多个处理步骤,每个步骤独立执行或依次执行,用于多文件的处理、转换或验证;流程作业,按照用户定义的流程控制指定条件来执行;分页作业,将大量数据分页处理,每次处理一个固定大小的数据页,直到处理完整个数据集;分段作业,将数据集分成多个段来处理的,每个段因子数目固定,每个因子单独被处理。3.根据权利要求1所述的一种基于springboot的java作业处理方法,其特征在于,所述将大量数据拆分为多个任务,采用多线程处理数据具体包括:作业拆分成多个步骤;采用线程池处理任务;在多线程处理作业过程中遇到并发问题,采用并发控制机制;通过缓存机制避免重复计算和重复i/o操作,读取器和写入器支持预取机制,能够在一次读/写时,预取多条数据。4.根据权利要求1所述的一种基于springboot的java作业处理方法,其特征在于,所述采用多种方式进行事务控制处理具体包括:单个事务控制整个作业;多个task的事务控制;在step中使用分片技术,将大型数据集拆分成小型数据集;逐条记录控制事务;批处理中使用多线程。5.根据权利要求1所述的一种基于springboot的java作业处理方法,其特征在于,所述从输入文件中读取数据,转换为可用于进一步处理的格式,对处理后的数据进行计算,将计算结果保存到数据库或另一个输出文件中具体包括:输入文件格式和结构:需要支持多种文件格式和结构;数据转换逻辑,将输入文件中的数据转换为符合业务需求的格式;
数据批量处理;建立多种异常处理策略。6.根据权利要求1所述的一种基于springboot的java作业处理方法,其特征在于,所述在引入作业处理的依赖包时,利用spring生态系统的自动装配帮助快速配置和设置应用程序具体包括:明确需要封装的作业处理程序的功能及其实现方式;根据业务需求,设计清晰、易于使用的组件接口;将作业处理程序的核心模块进行封装,并转化为组件的形式;根据组件要求,对作业处理程序封装的核心模块进行扩展和优化;使用springboot框架,将作业处理组件进行集成和管理。7.根据权利要求1所述的一种基于springboot的java作业处理方法,其特征在于,所述采用心跳检测确定服务是否可用,及时捕捉到问题并解决具体包括:客户端向服务器发送心跳包;服务器收到心跳包并处理;客户端收到响应,并更新自身状态;重复周期性地发送心跳包。
技术总结
本发明提供的一种基于SpringBoot的Java作业处理方法,所述作业处理方法包括:根据场景采用对应的作业处理方案;将大量数据拆分为多个任务,采用多线程处理数据;采用多种方式进行事务控制处理;从输入文件中读取数据,转换为可用于进一步处理的格式,对处理后的数据进行计算,将计算结果保存到数据库或另一个输出文件中;在引入作业处理的依赖包时,利用Spring生态系统的自动装配帮助快速配置和设置应用程序;采用心跳检测确定服务是否可用,及时捕捉到问题并解决;进行集群部署。提高了整个系统的工作效率。整个系统的工作效率。整个系统的工作效率。
技术研发人员:张苗
受保护的技术使用者:北银金融科技有限责任公司
技术研发日:2023.06.06
技术公布日:2023/9/6
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
