CN117435173A - 一种基于领域注解的微服务自动拆分方法和系统 - Google Patents
一种基于领域注解的微服务自动拆分方法和系统 Download PDFInfo
- Publication number
- CN117435173A CN117435173A CN202311560341.XA CN202311560341A CN117435173A CN 117435173 A CN117435173 A CN 117435173A CN 202311560341 A CN202311560341 A CN 202311560341A CN 117435173 A CN117435173 A CN 117435173A
- Authority
- CN
- China
- Prior art keywords
- service
- micro
- splitting
- domain
- marking
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 316
- 238000007781 pre-processing Methods 0.000 claims description 70
- 238000006243 chemical reaction Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 5
- 230000008569 process Effects 0.000 description 12
- 238000002372 labelling Methods 0.000 description 9
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012827 research and development Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 239000000178 monomer Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于领域注解的微服务自动拆分方法和系统,针对庞大的单个应用的系统代码,采用人工标注方式对系统代码的领域注解进行初步标注,然后对人工标注后的系统代码进行工具预处理,完成系统代码的业务领域拆分。接着对业务领域拆分后的系统代码进行代码包重构,获取不同业务领域的代码包。并对各代码包中需要提供微服务的方法进行标记。最后基于微服务标记后的方法进行微服务拆分,获取各业务领域的微服务代码。
Description
技术领域
本发明涉及自动化代码处理领域,具体涉及一种基于领域注解的微服务自动拆分方法和系统。
背景技术
对于科技公司而言,在研发工作中往往需要考虑如何更高效地进行研发工作。目前,为了提高效率,往往会在每个项目开展的初期采用单体应用的模式进行开发。然而随着应用规模的不断扩大,单体应用的研发成本会变得越来越高,甚至无法维护。一种流行的方法是将单体应用拆分为多个相互独立运行的微服务应用,以便多个团队来进行研发迭代和维护。然而,微服务拆分的工作依赖大量的人工参与,特别是对于系统稳定性要求较高的项目,需要大量的研发人员和测试人员介入。
发明内容
以下给出一个或多个方面的简要概述以提供对这些方面的基本理解。此概述不是所有构想到的方面的详尽综览,并且既非旨在指认出所有方面的关键性或决定性要素亦非试图界定任何或所有方面的范围。其唯一的目的是要以简化形式给出一个或多个方面的一些概念以为稍后给出的更加详细的描述之序。
本发明的目的在于解决上述问题,提供了一种基于领域注解的微服务自动拆分方法和系统,仅需要少量的人工参与业务领域的标注,即可快速、准确、完整地将一个单体应用拆分成多个微服务应用,大大提升了拆分效率。
本发明的技术方案为:
本发明提供一种基于领域注解的微服务自动拆分方法,包括以下步骤:
对系统代码的领域注解进行人工标注;
对人工标注后的系统代码进行工具预处理,完成系统代码的业务领域拆分;
对业务领域拆分后的系统代码进行代码包重构,获取不同业务领域的代码包;
对各代码包中需要提供微服务的方法进行标记;
基于微服务标记后的方法进行微服务拆分,获取各业务领域的微服务代码。
根据本发明的基于领域注解的微服务自动拆分方法的一实施例,所述基于领域注解的微服务自动拆分方法针对系统代码的业务方法进行人工标注,然后采用自动化标注预处理工具对人工标注后的系统代码进行工具预处理,并根据预处理结果对系统代码进行业务领域拆分,从而获取不同业务领域的代码。
根据本发明的基于领域注解的微服务自动拆分方法的一实施例,所述自动化标注预处理工具依次通过以下预处理方式对系统代码进行工具预处理:
预处理1:对系统代码中的接口和抽象类进行业务领域标注;
预处理2:对系统代码中带有数据库事务的事务方法进行业务领域标注;
预处理3:对未被人工标注的方法进行业务领域标注。
根据本发明的基于领域注解的微服务自动拆分方法的一实施例,所述基于领域注解的微服务自动拆分方法采用预处理1对系统代码的接口以及对应的实现类进行预处理时,若被人工标注的接口只有一个实现类,则按照接口中下属方法的业务领域对接口进行拆分,然后将拆分后的接口标记为下属方法的业务领域;若被人工标注的接口有多个实现类,则将对应实现类中的方法均标记为最多出现的业务域,并将对应的多个实现类中的接口标记为公共代码。
根据本发明的基于领域注解的微服务自动拆分方法的一实施例,所述基于领域注解的微服务自动拆分方法采用预处理2对带有数据库事务的事务方法进行预处理时,将带有数据库事务的事务方法所调用的所有下游方法全部标记为与该事务方法所属一个业务领域。
根据本发明的基于领域注解的微服务自动拆分方法的一实施例,所述基于领域注解的微服务自动拆分方法采用预处理3对未被人工标注的非业务方法进行预处理时,若未被人工标注的非业务方法仅被一个业务领域使用,则将该非业务方法标注为该业务领域的方法;若未被人工标注的非业务方法被多个业务领域使用,则将该非业务方法标注为公共方法。
根据本发明的基于领域注解的微服务自动拆分方法的一实施例,所述基于领域注解的微服务自动拆分方法在对需要提供微服务的方法进行标记时,若一个方法仅被自己业务领域中的方法调用,则无需对该方法进行微服务标记,若一个方法被多个业务领域中的方法调用,则该对方法进行微服务标记。
根据本发明的基于领域注解的微服务自动拆分方法的一实施例,所述基于领域注解的微服务自动拆分方法在基于标记后的方法进行微服务拆分时,首先采用自动转换工具对方法的入参和出参进行自动转换,然后基于转换后的方法代码生成各业务领域微服务接口,最后根据所标记的微服务以及对应的微服务接口生成各业务领域应用服务代码,从而实现系统代码的微服务拆分。
本发明还提供一种基于领域注解的微服务自动拆分系统,包括系统代码获取模块、标注预处理模块、代码包重构模块、微服务标记模块以及微服务拆分模块;其中,
系统代码获取模块用于获取人工标注领域注解的系统代码;
标注预处理模块用于对人工标注后的系统代码进行工具预处理,完成系统代码的业务领域拆分;
代码包重构模块用于对业务领域拆分后的系统代码进行代码包重构,获取不同业务领域的代码包;
微服务标记模块用于对各代码包中需要提供微服务的方法进行标记;
微服务拆分模块用于根据微服务标记后的方法进行微服务拆分,获取各业务领域的微服务代码。
根据本发明的基于领域注解的微服务自动拆分系统的一实施例,所述基于领域注解的微服务自动拆分系统针对系统代码的业务方法进行人工标注,然后采用自动化标注预处理工具对人工标注后的系统代码进行工具预处理,并根据预处理结果对系统代码进行业务领域拆分,从而获取不同业务领域的代码。
根据本发明的基于领域注解的微服务自动拆分系统的一实施例,所述自动化标注预处理工具依次通过以下预处理方式对系统代码进行工具预处理:
预处理1:对系统代码中的接口和抽象类进行业务领域标注;
预处理2:对系统代码中带有数据库事务的事务方法进行业务领域标注;
预处理3:对未被人工标注的方法进行业务领域标注。
根据本发明的基于领域注解的微服务自动拆分系统的一实施例,所述标注预处理模块采用预处理1对系统代码的接口以及对应的实现类进行预处理时,若被人工标注的接口只有一个实现类,则按照接口中下属方法的业务领域对接口进行拆分,然后将拆分后的接口标记为下属方法的业务领域;若被人工标注的接口有多个实现类,则将对应实现类中的方法均标记为最多出现的业务域,并将对应的多个实现类中的接口标记为公共代码。
根据本发明的基于领域注解的微服务自动拆分系统的一实施例,所述标注预处理模块采用预处理2对带有数据库事务的事务方法进行预处理时,将带有数据库事务的事务方法所调用的所有下游方法全部标记为与该事务方法所属一个业务领域。
根据本发明的基于领域注解的微服务自动拆分系统的一实施例,所述标注预处理模块采用预处理3对未被人工标注的非业务方法进行预处理时,若未被人工标注的非业务方法仅被一个业务领域使用,则将该非业务方法标注为该业务领域的方法;若未被人工标注的非业务方法被多个业务领域使用,则将该非业务方法标注为公共方法。
根据本发明的基于领域注解的微服务自动拆分系统的一实施例,所述微服务标记模块在对需要提供微服务的方法进行标记时,若一个方法仅被自己业务领域中的方法调用,则无需对该方法进行微服务标记,若一个方法被多个业务领域中的方法调用,则该对方法进行微服务标记。
根据本发明的基于领域注解的微服务自动拆分系统的一实施例,所述微服务拆分模块在基于标记后的方法进行微服务拆分时,首先采用自动转换工具对方法的入参和出参进行自动转换,然后基于转换后的方法代码生成各业务领域微服务接口,最后根据所标记的微服务以及对应的微服务接口生成各业务领域应用服务代码,从而实现系统代码的微服务拆分。
本发明还提供一种存储有计算机程序代码的计算机可读介质,所述计算机程序代码在由处理器执行时实现如上所述的方法。
本发明还提供一种基于领域注解的微服务自动拆分装置,包括:
存储器,用于存储可由处理器执行的指令;以及
处理器,用于执行所述指令以实现如上所述的方法。
本发明对比现有技术有如下的有益效果:本发明针对庞大的单体应用,首先采用人工标注对系统代码的领域注解进行初步标注,然后采用自动化标注预处理工具对人工标注后的系统代码进行工具预处理,完成系统代码的业务领域拆分,并针对业务领域拆分后的系统代码进行代码包重构,从而获取不同业务领域的代码包。在基于不同业务领域的代码包进行微服务拆分之前,还对各代码包中需要提供微服务的方法进行标记,并采用自动转换工具对方法的入参和出参进行自动转换,然后基于转换后的方法代码生成各业务领域微服务接口,最后根据所标记的微服务以及对应的微服务接口生成各业务领域应用服务代码,从而实现系统代码的微服务拆分。与现有技术相比,本发明仅需要少量的人工参与业务领域的标注,即可快速、准确、完整地将一个单体应用拆分成多个微服务应用,不仅大大提升了拆分效率以及项目的可维护性,而且节约了大量人力资源,有利于项目成本节约。
附图说明
在结合以下附图阅读本公开的实施例的详细描述之后,能够更好地理解本发明的上述特征和优点。在附图中,各组件不一定是按比例绘制,并且具有类似的相关特性或特征的组件可能具有相同或相近的附图标记。
图1是示出本发明的基于领域注解的微服务自动拆分方法一实施例的流程图。
图2是示出本发明的基于领域注解的微服务自动拆分系统一实施例的架构图。
具体实施方式
以下结合附图和具体实施例对本发明作详细描述。注意,以下结合附图和具体实施例描述的诸方面仅是示例性的,而不应被理解为对本发明的保护范围进行任何限制。
在此公开一种基于领域注解的微服务自动拆分方法一实施例,图1是示出本发明的基于领域注解的微服务自动拆分方法一实施例的流程图。请结合图1,以下是对基于领域注解的微服务自动拆分方法各步骤的详细说明。
步骤S1:对系统代码的领域注解进行人工标注。
本实施例中,仅仅针对系统代码的业务方法进行人工标注。在对系统代码中的业务方法进行初步的人工标注以后,采用自动化标注预处理工具对人工标注后的系统代码进行工具预处理,并根据预处理结果对系统代码进行业务领域拆分,从而获取不同业务领域的代码。
步骤S2:对人工标注后的系统代码进行工具预处理,完成系统代码的业务领域拆分。
本实施例中,在采用自动化工具对人工标注后的系统代码进行工具预处理以后,人工标注的领域注解可能会有所变化,部分公共方法也可能会被标记为领域方法。其中,在对人工标注后的系统代码进行工具预处理时,依次通过以下预处理方式对系统代码进行工具预处理:
预处理1:对系统代码中的接口和抽象类进行业务领域标注。
本实施例中,在采用预处理1对人工标注的系统代码进行处理时,其主要针对面向对象编程语言(如Java)中一个接口被多个类实现,或一个抽象类被多个类扩展的情况来进行处理。
假设一个接口有三个方法,该接口只有一个实现类,且该接口中的两个方法被人工标记为A域,另一个方法被标记为B域,则可以将该接口拆成两个接口。且对于A域的接口,可以提供两个方法。B域的接口则提供一个方法即可。
但对于一个接口有多个实现类的情况下,就有可能出现其中一个实现类有两个方法被标记为A域,一个方法被标记为B域,另一个实现类有一个方法被标记为C域,两个方法被标记为B域的情况。此时无法对接口进行拆分。因此,对于一个接口被多个类实现的情况,通过预处理1将这些实现类中的方法都标记为最多出现的业务域。这样可以将有多个实现类的接口放到公共代码中,且对应的各个实现类则可以被放到不同的域中。
对于一个抽象类被多个类扩展的情况,则采用如上所述的一个接口有多个实现类的预处理方式来进行业务领域标记,即业务标记只在类级别上生效,而无需细化到方法。
预处理2:对系统代码中带有数据库事务的事务方法进行业务领域标注。
本实施例中,在采用预处理2对人工标注的系统代码进行处理时,其所针对的是对带有数据库事务的事务方法进行处理。在对系统代码进行微服务拆分时,若原本在一个应用中的事务方法被拆到了多个微服务中,则该数事务方法将会失效。因此,为了避免事务方法出现失效情况,通过预处理2将事务方法调用的所有下游方法全部标记为与该事务方法所属一个业务领域,以避免出现数据库事务无法保障的问题。
预处理3:对未被人工标注的方法进行业务领域标注。
本实施例中,在采用预处理3对人工标注的系统代码进行处理时,其主要针对未被人工标注的方法进行处理。在运行自动化标注预处理工具之前,往往要求先对项目的所有业务方法进行人工标注。一般来说,没有人工标注的往往都是非业务方法(比如:某个参数对象的set和get方法,或工具类方法等)。这些非业务方法如果只被一个业务领域的方法使用,则将标记为该业务领域的方法。否则的话,则将这些非业务方法标记为公共方法。
由此,本实施例中,系统代码依次通过预处理1、预处理2以及预处理3的预处理以后,完成了系统代码的业务领域标注,然后根据标注后的业务领域将系统代码进行拆分。
步骤S3:对业务领域拆分后的系统代码进行代码包重构,获取不同业务领域的代码包。
本实施例中,通过上述步骤S2完成系统代码的业务领域标记以及拆分以后,将不同业务领域的程序方法被移动到不同的包(可以理解为不同的文件夹)中,获取不同业务领域的代码包,从而完成对系统代码的代码包重构。其中,每一代码包中包括同一业务领域的方法。
步骤S4:对各代码包中需要提供微服务的方法进行标记。
本实施例中,通过上述步骤S3完系统代码的代码包重构以后,采用微服务标记方式对各代码包中需要提供微服务的方法进行标记。在进行微服务标记时,如果一个方法仅被自己业务领域中的方法调用,则该方法不需要提供微服务,无需进行标记。否则的话,则说明该方法需要提供微服务,需要该对方法进行微服务标记。
步骤S5:基于标记后的方法进行微服务拆分,获取各业务领域的微服务代码。
本实施例中,通过上述步骤S4完成系统代码中方法的微服务标记以后,基于标记后的方法进行微服务拆分,从而获取各领域的微服务代码。其中,在进行微服务拆分时,首先采用自动转换工具对方法的入参和出参进行自动转换,具体包括如下两个小步骤:
第一个小步骤是新生成一个新方法(该方法将用于微服务调用)。其中,该新方法的入参是一个新对象,其包含了与原方法相同的所有入参,出参为也是一个新对象,其包含一个Exception类型的参数、原方法的出参、以及原方法中所有入参中的对象类型参数。
之所以出参中需要一个Exception类型的参数,主要是因为原本方法中抛出的异常有可能会被微服务框架包掉(catch掉),从而没有正常抛出。在输出对象中加入原方法中所有入参中的对象类型参数是因为在Java以及大部分面向对象的编程语言中,对象类型通常只是一个引用,在原先的单体应用中,方法执行过程中有可能会修改对象中的值。在将其转换成远程方法之后,对于入参对象的修改并不会被应用到原始参数上,因此需要将这些参数返回回来,额外进行处理。
第二个小步骤便是将新方法的出入参转换为原方法的出入参。具体的来说,为了处理上述的异常(Exception),将返回值中针对入参对象的修改重新赋值到入参中,并返回出参。
由此,经过上述两个步骤的转换之后,系统代码中的方法定义完全没有变化。这样可以保证该方法的调用方仍然可以把它当做原来的本地方法一样进行调用。此外,在转换时,使用deepCopy的方法将入参的值完全更新为response中返回的值,以保证该方法改成微服务调用之后原方法的逻辑不会有所改变。最后,本实施例还针对方法的异常进行了处理,进一步保证转换后的方法执行后的结果与原来的本地方法完全保持一致。
此外,本实施例中主要针对Java语言进行说明,但Exception类型是大多数编程语言中的一种基础类型,根据其他编程语言对出出参和入参转化方法略加修改,也能适用于其他编程语言。
本实施例中,在通过上述步骤将系统代码的方法的入参和出参完成转换以后,按照微服务框架的要求针对各业务领域的代码生成各业务领域微服务接口,然后根据所标记的微服务以及对应的微服务接口生成各业务领域应用服务代码,从而实现将单个应用的代码自动拆分成多个应用。
本说明书中还公开一种基于领域注解的微服务自动拆分系统一实施例,图2是示出本发明的基于领域注解的微服务自动拆分系统一实施例的架构图。如图2所示,本实施例中,基于领域注解的微服务自动拆分系统包括系统代码获取模块、标注预处理模块、代码包重构模块、微服务标记模块以及微服务拆分模块。其中,系统代码获取模块用于获取人工标注领域注解的系统代码。标注预处理模块用于对人工标注后的系统代码进行工具预处理,完成系统代码的业务领域拆分。代码包重构模块用于对业务领域拆分后的系统代码进行代码包重构,获取不同业务领域的代码包。微服务标记模块用于对各代码包中需要提供微服务的方法进行标记。微服务拆分模块用于根据微服务标记后的方法进行微服务拆分,获取各业务领域的微服务代码。
具体地,本实施例中,仅仅针对系统代码的业务方法进行人工标注。在对系统代码中的业务方法进行初步的人工标注以后,采用自动化标注预处理工具对人工标注后的系统代码进行工具预处理,并根据预处理结果对系统代码进行业务领域拆分,从而获取不同业务领域的代码。
本实施例中,在采用自动化工具对人工标注后的系统代码进行工具预处理以后,人工标注的领域注解可能会有所变化,部分公共方法也可能会被标记为领域方法。其中,在对人工标注后的系统代码进行工具预处理时,依次通过以下预处理方式对系统代码进行工具预处理:
预处理1:对系统代码中的接口和抽象类进行业务领域标注。
本实施例中,在采用预处理1对人工标注的系统代码进行处理时,其主要针对面向对象编程语言(如Java)中一个接口被多个类实现,或一个抽象类被多个类扩展的情况来进行处理。
假设一个接口有三个方法,该接口只有一个实现类,且该接口中的两个方法被人工标记为A域,另一个方法被标记为B域,则可以将该接口拆成两个接口。且对于A域的接口,可以提供两个方法。B域的接口则提供一个方法即可。
但对于一个接口有多个实现类的情况下,就有可能出现其中一个实现类有两个方法被标记为A域,一个方法被标记为B域,另一个实现类有一个方法被标记为C域,两个方法被标记为B域的情况。此时无法对接口进行拆分。因此,对于一个接口被多个类实现的情况,通过预处理1将这些实现类中的方法都标记为最多出现的业务域。这样可以将有多个实现类的接口放到公共代码中,且对应的各个实现类则可以被放到不同的域中。
对于一个抽象类被多个类扩展的情况,则采用如上所述的一个接口有多个实现类的预处理方式来进行业务领域标记,即业务标记只在类级别上生效,而无需细化到方法。
预处理2:对系统代码中带有数据库事务的事务方法进行业务领域标注。
本实施例中,在采用预处理2对人工标注的系统代码进行处理时,其所针对的是对带有数据库事务的事务方法进行处理。在对系统代码进行微服务拆分时,若原本在一个应用中的事务方法被拆到了多个微服务中,则该数事务方法将会失效。因此,为了避免事务方法出现失效情况,通过预处理2将事务方法调用的所有下游方法全部标记为与该事务方法所属一个业务领域,以避免出现数据库事务无法保障的问题。
预处理3:对未被人工标注的方法进行业务领域标注。
本实施例中,在采用预处理3对人工标注的系统代码进行处理时,其主要针对未被人工标注的方法进行处理。在运行自动化标注预处理工具之前,往往要求先对项目的所有业务方法进行人工标注。一般来说,没有人工标注的往往都是非业务方法(比如:某个参数对象的set和get方法,或工具类方法等)。这些非业务方法如果只被一个业务领域的方法使用,则将标记为该业务领域的方法。否则的话,则将这些非业务方法标记为公共方法。
由此,本实施例中,系统代码依次通过预处理1、预处理2以及预处理3的预处理以后,完成了系统代码的业务领域标注,然后根据标注后的业务领域将系统代码进行拆分。
此外本实施例中,通过上述步骤完成系统代码的业务领域标记以及拆分以后,将不同业务领域的程序方法被移动到不同的包(可以理解为不同的文件夹)中,获取不同业务领域的代码包,从而完成对系统代码的代码包重构。其中,每一代码包中包括同一业务领域的方法。
在完成系统代码的代码包重构以后,采用微服务标记方式对各代码包中需要提供微服务的方法进行标记。在进行微服务标记时,如果一个方法仅被自己业务领域中的方法调用,则该方法不需要提供微服务,无需进行标记。否则的话,则说明该方法需要提供微服务,需要该对方法进行微服务标记。
本实施例中,通过上述完成系统代码中方法的微服务标记以后,基于标记后的方法进行微服务拆分,从而获取各领域的微服务代码。其中,在进行微服务拆分时,首先采用自动转换工具对方法的入参和出参进行自动转换,具体包括如下两个小步骤:
第一个小步骤是新生成一个新方法(该方法将用于微服务调用)。其中,该新方法的入参是一个新对象,其包含了与原方法相同的所有入参,出参为也是一个新对象,其包含一个Exception类型的参数、原方法的出参、以及原方法中所有入参中的对象类型参数。
之所以出参中需要一个Exception类型的参数,主要是因为原本方法中抛出的异常有可能会被微服务框架包掉(catch掉),从而没有正常抛出。在输出对象中加入原方法中所有入参中的对象类型参数是因为在Java以及大部分面向对象的编程语言中,对象类型通常只是一个引用,在原先的单体应用中,方法执行过程中有可能会修改对象中的值。在将其转换成远程方法之后,对于入参对象的修改并不会被应用到原始参数上,因此需要将这些参数返回回来,额外进行处理。
第二个小步骤便是将新方法的出入参转换为原方法的出入参。具体的来说,为了处理上述的异常(Exception),将返回值中针对入参对象的修改重新赋值到入参中,并返回出参。
由此,经过上述两个步骤的转换之后,系统代码中的方法定义完全没有变化。这样可以保证该方法的调用方仍然可以把它当做原来的本地方法一样进行调用。此外,在转换时,使用deepCopy的方法将入参的值完全更新为response中返回的值,以保证该方法改成微服务调用之后原方法的逻辑不会有所改变。最后,本实施例还针对方法的异常进行了处理,进一步保证转换后的方法执行后的结果与原来的本地方法完全保持一致。
此外,本实施例中主要针对Java语言进行说明,但Exception类型是大多数编程语言中的一种基础类型,根据其他编程语言对出出参和入参转化方法略加修改,也能适用于其他编程语言。
本实施例中,在通过上述步骤将系统代码的方法的入参和出参完成转换以后,按照微服务框架的要求针对各业务领域的代码生成各业务领域微服务接口,然后根据所标记的微服务以及对应的微服务接口生成各业务领域应用服务代码,从而实现将单个应用的代码自动拆分成多个应用。
本说明书还公开一种存储有计算机程序代码的计算机可读介质,计算机程序代码在由处理器执行时实现如上所述的基于领域注解的微服务自动拆分方法。
本说明书还公开一种综合仿真集成平台构建装置,包括存储器以及处理器。其中,存储器用于存储可由处理器执行的指令,处理器用于执行存储器指令以实现如上所述的基于领域注解的微服务自动拆分方法。
提供对本公开的先前描述是为使得本领域任何技术人员皆能够制作或使用本公开。对本公开的各种修改对本领域技术人员来说都将是显而易见的,且本文中所定义的普适原理可被应用到其他变体而不会脱离本公开的精神或范围。由此,本公开并非旨在被限定于本文中所描述的示例和设计,而是应被授予与本文中所公开的原理和新颖性特征相一致的最广范围。
本领域技术人员将进一步领会,结合本文中所公开的实施例来描述的各种解说性逻辑板块、模块、电路、和算法步骤可实现为电子硬件、计算机软件、或这两者的组合。为清楚地解说硬件与软件的这一可互换性,各种解说性组件、框、模块、电路、和步骤在上面是以其功能性的形式作一般化描述的。此类功能性是被实现为硬件还是软件取决于具体应用和施加于整体系统的设计约束。技术人员对于每种特定应用可用不同的方式来实现所描述的功能性,但这样的实现决策不应被解读成导致脱离了本发明的范围。
结合本文所公开的实施例描述的各种解说性逻辑板块、模块、和电路可用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立的门或晶体管逻辑、分立的硬件组件、或其设计成执行本文所描述功能的任何组合来实现或执行。通用处理器可以是微处理器,但在替换方案中,该处理器可以是任何常规的处理器、控制器、微控制器、或状态机。处理器还可以被实现为计算设备的组合,例如DSP与微处理器的组合、多个微处理器、与DSP核心协作的一个或多个微处理器、或任何其他此类配置。
结合本文中公开的实施例描述的方法或算法的步骤可直接在硬件中、在由处理器执行的软件模块中、或在这两者的组合中体现。软件模块可驻留在RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动盘、CD-ROM、或本领域中所知的任何其他形式的存储介质中。示例性存储介质耦合到处理器以使得该处理器能从/向该存储介质读取和写入信息。在替换方案中,存储介质可以被整合到处理器。处理器和存储介质可驻留在ASIC中。ASIC可驻留在用户终端中。在替换方案中,处理器和存储介质可作为分立组件驻留在用户终端中。
在一个或多个示例性实施例中,所描述的功能可在硬件、软件、固件或其任何组合中实现。如果在软件中实现为计算机程序产品,则各功能可以作为一条或更多条指令或代码存储在计算机可读介质上或藉其进行传送。计算机可读介质包括计算机存储介质和通信介质两者,其包括促成计算机程序从一地向另一地转移的任何介质。存储介质可以是能被计算机访问的任何可用介质。作为示例而非限定,这样的计算机可读介质可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、或能被用来携带或存储指令或数据结构形式的合意程序代码且能被计算机访问的任何其它介质。任何连接也被正当地称为计算机可读介质。例如,如果软件是使用同轴电缆、光纤电缆、双绞线、数字订户线(DSL)、或诸如红外、无线电、以及微波之类的无线技术从web网站、服务器、或其它远程源传送而来,则该同轴电缆、光纤电缆、双绞线、DSL、或诸如红外、无线电、以及微波之类的无线技术就被包括在介质的定义之中。如本文中所使用的盘(disk)和碟(disc)包括压缩碟(CD)、激光碟、光碟、数字多用碟(DVD)、软盘和蓝光碟,其中盘(disk)往往以磁的方式再现数据,而碟(disc)用激光以光学方式再现数据。上述的组合也应被包括在计算机可读介质的范围内。
Claims (18)
1.一种基于领域注解的微服务自动拆分方法,其特征在于,包括以下步骤:
对系统代码的领域注解进行人工标注;
对人工标注后的系统代码进行工具预处理,完成系统代码的业务领域拆分;
对业务领域拆分后的系统代码进行代码包重构,获取不同业务领域的代码包;
对各代码包中需要提供微服务的方法进行标记;
基于微服务标记后的方法进行微服务拆分,获取各业务领域的微服务代码。
2.根据权利要求1所述的基于领域注解的微服务自动拆分方法,其特征在于,所述基于领域注解的微服务自动拆分方法针对系统代码的业务方法进行人工标注,然后采用自动化标注预处理工具对人工标注后的系统代码进行工具预处理,并根据预处理结果对系统代码进行业务领域拆分,从而获取不同业务领域的代码。
3.根据权利要求1所述的基于领域注解的微服务自动拆分方法,其特征在于,所述自动化标注预处理工具依次通过以下预处理方式对系统代码进行工具预处理:
预处理1:对系统代码中的接口和抽象类进行业务领域标注;
预处理2:对系统代码中带有数据库事务的事务方法进行业务领域标注;
预处理3:对未被人工标注的方法进行业务领域标注。
4.根据权利要求3所述的基于领域注解的微服务自动拆分方法,其特征在于,所述基于领域注解的微服务自动拆分方法采用预处理1对系统代码的接口以及对应的实现类进行预处理时,若被人工标注的接口只有一个实现类,则按照接口中下属方法的业务领域对接口进行拆分,然后将拆分后的接口标记为下属方法的业务领域;若被人工标注的接口有多个实现类,则将对应实现类中的方法均标记为最多出现的业务域,并将对应的多个实现类中的接口标记为公共代码。
5.根据权利要求4所述的基于领域注解的微服务自动拆分方法,其特征在于,所述基于领域注解的微服务自动拆分方法采用预处理2对带有数据库事务的事务方法进行预处理时,将带有数据库事务的事务方法所调用的所有下游方法全部标记为与该事务方法所属一个业务领域。
6.根据权利要求4所述的基于领域注解的微服务自动拆分方法,其特征在于,所述基于领域注解的微服务自动拆分方法采用预处理3对未被人工标注的非业务方法进行预处理时,若未被人工标注的非业务方法仅被一个业务领域使用,则将该非业务方法标注为该业务领域的方法;若未被人工标注的非业务方法被多个业务领域使用,则将该非业务方法标注为公共方法。
7.根据权利要求1所述的基于领域注解的微服务自动拆分方法,其特征在于,所述基于领域注解的微服务自动拆分方法在对需要提供微服务的方法进行标记时,若一个方法仅被自己业务领域中的方法调用,则无需对该方法进行微服务标记,若一个方法被多个业务领域中的方法调用,则该对方法进行微服务标记。
8.根据权利要求1所述的基于领域注解的微服务自动拆分方法,其特征在于,所述基于领域注解的微服务自动拆分方法在基于标记后的方法进行微服务拆分时,首先采用自动转换工具对方法的入参和出参进行自动转换,然后基于转换后的方法代码生成各业务领域微服务接口,最后根据所标记的微服务以及对应的微服务接口生成各业务领域应用服务代码,从而实现系统代码的微服务拆分。
9.一种基于领域注解的微服务自动拆分系统,其特征在于,包括系统代码获取模块、标注预处理模块、代码包重构模块、微服务标记模块以及微服务拆分模块;其中,
系统代码获取模块用于获取人工标注领域注解的系统代码;
标注预处理模块用于对人工标注后的系统代码进行工具预处理,完成系统代码的业务领域拆分;
代码包重构模块用于对业务领域拆分后的系统代码进行代码包重构,获取不同业务领域的代码包;
微服务标记模块用于对各代码包中需要提供微服务的方法进行标记;
微服务拆分模块用于根据微服务标记后的方法进行微服务拆分,获取各业务领域的微服务代码。
10.根据权利要求9所述的基于领域注解的微服务自动拆分系统,其特征在于,所述基于领域注解的微服务自动拆分系统针对系统代码的业务方法进行人工标注,然后采用自动化标注预处理工具对人工标注后的系统代码进行工具预处理,并根据预处理结果对系统代码进行业务领域拆分,从而获取不同业务领域的代码。
11.根据权利要求9所述的基于领域注解的微服务自动拆分系统,其特征在于,所述自动化标注预处理工具依次通过以下预处理方式对系统代码进行工具预处理:
预处理1:对系统代码中的接口和抽象类进行业务领域标注;
预处理2:对系统代码中带有数据库事务的事务方法进行业务领域标注;
预处理3:对未被人工标注的方法进行业务领域标注。
12.根据权利要求11所述的基于领域注解的微服务自动拆分系统,其特征在于,所述标注预处理模块采用预处理1对系统代码的接口以及对应的实现类进行预处理时,若被人工标注的接口只有一个实现类,则按照接口中下属方法的业务领域对接口进行拆分,然后将拆分后的接口标记为下属方法的业务领域;若被人工标注的接口有多个实现类,则将对应实现类中的方法均标记为最多出现的业务域,并将对应的多个实现类中的接口标记为公共代码。
13.根据权利要求4所述的基于领域注解的微服务自动拆分系统,其特征在于,所述标注预处理模块采用预处理2对带有数据库事务的事务方法进行预处理时,将带有数据库事务的事务方法所调用的所有下游方法全部标记为与该事务方法所属一个业务领域。
14.根据权利要求4所述的基于领域注解的微服务自动拆分系统,其特征在于,所述标注预处理模块采用预处理3对未被人工标注的非业务方法进行预处理时,若未被人工标注的非业务方法仅被一个业务领域使用,则将该非业务方法标注为该业务领域的方法;若未被人工标注的非业务方法被多个业务领域使用,则将该非业务方法标注为公共方法。
15.根据权利要求1所述的基于领域注解的微服务自动拆分系统,其特征在于,所述微服务标记模块在对需要提供微服务的方法进行标记时,若一个方法仅被自己业务领域中的方法调用,则无需对该方法进行微服务标记,若一个方法被多个业务领域中的方法调用,则该对方法进行微服务标记。
16.根据权利要求1所述的基于领域注解的微服务自动拆分系统,其特征在于,所述微服务拆分模块在基于标记后的方法进行微服务拆分时,首先采用自动转换工具对方法的入参和出参进行自动转换,然后基于转换后的方法代码生成各业务领域微服务接口,最后根据所标记的微服务以及对应的微服务接口生成各业务领域应用服务代码,从而实现系统代码的微服务拆分。
17.一种存储有计算机程序代码的计算机可读介质,其特征在于,所述计算机程序代码在由处理器执行时实现如权利要求1-8任一项所述的方法。
18.一种基于领域注解的微服务自动拆分装置,其特征在于,包括:
存储器,用于存储可由处理器执行的指令;以及
处理器,用于执行所述指令以实现如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311560341.XA CN117435173A (zh) | 2023-11-21 | 2023-11-21 | 一种基于领域注解的微服务自动拆分方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311560341.XA CN117435173A (zh) | 2023-11-21 | 2023-11-21 | 一种基于领域注解的微服务自动拆分方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117435173A true CN117435173A (zh) | 2024-01-23 |
Family
ID=89555192
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311560341.XA Pending CN117435173A (zh) | 2023-11-21 | 2023-11-21 | 一种基于领域注解的微服务自动拆分方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117435173A (zh) |
-
2023
- 2023-11-21 CN CN202311560341.XA patent/CN117435173A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Holzmann et al. | Automating software feature verification | |
CN112104709B (zh) | 智能合约的处理方法、装置、介质及电子设备 | |
CN104331366A (zh) | 一种测试用例设计效率提升方法及系统 | |
CN108363564A (zh) | 多项目组件化实现方法、装置、终端设备及存储介质 | |
WO2020000720A1 (zh) | 服务器、报文处理方法、程序和计算机可读存储介质 | |
CN103309904A (zh) | 一种生成数据仓库etl 代码的方法及装置 | |
CN112651218A (zh) | 一种标书自动生成方法、管理方法、介质以及计算机 | |
CN101819551B (zh) | 记录企业信息系统的服务交互数据的方法和系统 | |
WO2006136055A1 (fr) | Procédé d'exploration de données texte | |
CN104657274A (zh) | 软件界面测试方法及装置 | |
CN101980546B (zh) | 智能网平台、业务执行方法和分析业务异常的方法 | |
US20060130011A1 (en) | Extending existing model-to-model transformations | |
CN112559635A (zh) | 以太坊联盟链节点的业务处理方法、装置、设备及介质 | |
WO2024164559A1 (zh) | 一种系统升级方法、装置、设备及存储介质 | |
CN106990974A (zh) | 一种app应用更新方法、装置及电子设备 | |
CN202143092U (zh) | 报文处理系统 | |
CN117435173A (zh) | 一种基于领域注解的微服务自动拆分方法和系统 | |
US20110131552A1 (en) | Augmenting visualization of a call stack | |
CN113704123B (zh) | 接口测试方法、装置、设备以及存储介质 | |
CN114398152A (zh) | 接口仿真服务调用方法及装置 | |
CN114116900A (zh) | 一种基于mdd模型的高效交易系统及开发方法 | |
TWI414995B (zh) | 開發及執行平台 | |
CN109857390B (zh) | 一种Git仓库文件注解系统的注解传递方法 | |
CN108304219A (zh) | 二次开发平台及方法 | |
CN116962407B (zh) | 分布式链路标签的处理方法和装置、分布式链路追踪系统及分布式系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |