一种基于减少JVM进程启动多个Springboot项目的方法与流程

文档序号:34233770发布日期:2023-05-24 17:51阅读:123来源:国知局
一种基于减少JVM进程启动多个Springboot项目的方法与流程

本发明涉及java应用与开发,尤其涉及一种基于减少jvm进程启动多个springboot项目的方法。


背景技术:

1、springboot 框架主要应用于微服务架构体系。微服务架构设计对三高问题有很好的解决方案。但对于并发不高,对硬件资源敏感的项目,存在不足。例如一体机中需要运行多个springboot项目,现有方案会为每个springboot项目开启一个jvm进程。

2、中国专利公开号cn111104207a,公开了一种基于springboot实现动态配置定时任务的方法。本发明所述的方法包含以下几个步骤:1、定义任务类,并撰写需要执行的任务方法;2、定义定时器配置类,配置定时器触发器、属性与调度方法;3、定义定时器时间配置类,设置多久访问一次数据库;4、从数据库获得定时器执行的cron表达式并决定是否重新设置定时任务。

3、由此可见,当前的每个springboot项目开启一个jvm进程多个jvm进程导致内存消耗增大。


技术实现思路

1、为此,本发明提供一种基于减少jvm进程启动多个springboot项目的方法,用以克服现有技术中每个springboot项目开启一个jvm进程多个jvm进程导致内存消耗增大的问题。

2、为实现上述目的,本发明提供一种基于减少jvm进程启动多个springboot项目的方法,包括,

3、步骤s1,数据评估模块对每个待启动的springboot项目需要调动的数据量进行评估;

4、步骤s2,数据溯源模块统计每个待启动的springboot项目需要调动的数据所涉及的公共资源包;

5、步骤s3,数据整合模块根据所述数据评估模块和所述数据溯源模块获取的信息对待启动的springboot进行分组;所述数据整合模块对每个待启动的springboot项目需要调动的数据所涉及的公共资源包进行分析,判定是否存有共存资源包,若存有共存资源包,所述数据整合模块根据共存资源包的数量和共存资源包占据的数据量对待启动的springboot进行分组;

6、步骤s4,名称生成模块对同一组内的springboot项目的源代码进行修正;

7、步骤s5,启动各springboot项目,同一组内的springboot项目采用同一jvm进程启动。

8、进一步地,所述数据评估模块对每个待启动的springboot项目按照需要调动的数据量由小到大进行编号,分别记为第一待启动项s1,第二待启动项s2,...,第n待启动项sn,n为待启动的springboot项目的总数量;

9、所述数据评估模块评估得到第一待启动项s1需要调动的数据量a01,第二待启动项s2需要调动的数据量a02,...,第n待启动项sn需要调动的数据量a0n;

10、所述数据溯源模块统计第一待启动项s1调用数据所涉及的公共资源包集合b1,统计第二待启动项s2调用数据所涉及的公共资源包集合b2,...,统计第n1待启动项sn调用数据所涉及的公共资源包集合bn1,n1为待启动项个数,且n1为正整数;

11、所述数据整合模块对公共资源包集合进行编号,记为第一公共资源包b1,第二第一公共资源包b2,...,第m第一公共资源包bm,m为公共资源包数量,且m为正整数;

12、所述数据整合模块对各所述公共资源包集合进行分析,判定是否存在共存资源包,共存资源包指使所有的公共资源包集合中均含有某一项公共资源包bj,j=1,2,...,m。

13、进一步地,所述数据整合模块内设置有共存资源包数据量评价参数ps,所述数据整合模块统计共存资源包内包含的数据量pz,数据整合模块将数据量pz与共存资源包数据量评价参数ps进行对比,

14、若pz≥ps,则所述数据整合模块根据各所述待启动项的数据量对启动项进行分组;

15、若pz<ps,则所述数据整合模块根据数据量pz与共存资源包数据量评价参数ps的差值结合各所述待启动项的数据量对启动项进行分组。

16、进一步地,若pz≥ps,所述数据整合模块根据各所述待启动项的数据量对启动项进行分组的过程为:

17、若>ap1,且≤ap1,所述数据整合模块判定第一待启动项s1至第i1待启动项si1为第一启动组;>ap1,且≤ap1,所述数据整合模块判定第i1+1待启动项si1+1至第i2待启动项si2为第二启动组,依次类推直至,≤ap1,所述数据整合模块判定第待启动项si1至第n待启动项sn为第k启动组;

18、若<ap1,所述数据整合模块判定所有待启动项为一组,

19、其中,ap1为所述数据整合模块内设有的分组数据量评价参数。

20、5、根据权利要求4所述的基于减少jvm进程启动多个springboot项目的方法,其特征在于,

21、当pz<ps时,所述数据整合模块计算所述数据整合模块根据数据量pz与共存资源包数据量评价参数ps的差值pc,设定pc=ps-pz,数据整合模块将分组数据量评价参数ap1调节至ap1’,且所述数据整合模块按照pz≥ps的分组方法对待启动项进行分组,其中,

22、ap1’=ap1+pc×l,

23、式中,l为共存资源包数据量对分组数据量评价参数的计算补偿参数。

24、进一步地,所述共存资源包中公共资源包个数越多分组数据量评价参数ap1数值越小。

25、7、根据权利要求3所述的基于减少jvm进程启动多个springboot项目的方法,其特征在于,

26、若不存在共存资源包bj,所述数据整合模块获取所有待启动项中出现的次数最多的公共资源包bk,并统计含有公共资源包bk的待启动项的个数kg,数据整合模块中设有伪共存资源包生成评价值ka,

27、若kg≥ka,所述数据整合模块判定公共资源包bk为伪共存资源包,所述数据整合模块将存有伪共存资源包的待启动项定义为第一类待启动项集合,将不存在伪共存资源包的待启动项定义为第二类待启动项集合,并分别对第一类待启动项集合与第二类待启动项集合进行分组;

28、若kg<ka,所述数据整合模块判定不存在伪共存资源包,数据整合模块对所有待启动项直接进行分组。

29、进一步地,若kg≥ka,所述数据整合模块对第一类待启动项集合进行分组,第一类待启动项集合包含有n2个待启动项,数据整合模块根据需要调动的数据量由小到大对第一类待启动项集合内的待启动项重新标号,记为第一待启动项d1,第二待启动项d2,...,第n2待启动项dn2,其中,第一待启动项d1需要调动的数据量为a21,第二待启动项d2需要调动的数据量为a22,...,第n2待启动项n2需要调动的数据量为a2n2,数据整合模块内设有分组数据量评价参数ap2,

30、若>ap2,且≤ap2,所述数据整合模块判定第一待启动项d1至第i1待启动项di1为第一启动组;>ap2,且≤ap2,所述数据整合模块判定第i1+1待启动项di1+1至第i2待启动项di2为第二启动组,依次类推直至≤ap2,所述数据整合模块判定第待启动项di1至第n2待启动项dn2为第k启动组;

31、若<ap2,所述数据整合模块判定第一类待启动项集合为第一启动组;

32、所述数据整合模块根据需要调动的数据量由小到大对第二类待启动项集合内的待启动项重新标号,记为第n2+1待启动项dn2+1,第n2+2待启动项dn2+2,...,第n待启动项dn,其中,第n2+1待启动项dn2+1需要调动的数据量为a2n2+1,第n2+2待启动项dn2+2需要调动的数据量为a2n2+2,...,第n待启动项n需要调动的数据量为a2n,数据整合模块内设有分组数据量评价参数ap3,所述数据整合模块对第二类待启动项集合进行分组,分组方式与第一类待启动项集合分组方式相同。

33、进一步地,所述数据整合模块对不存在伪共存资源包的所有待启动项直接进行分组,数据整合模块内设有分组数据量评价参数ap3,

34、若>ap3,且≤ap3,所述数据整合模块判定第一待启动项s1至第i1待启动项si1为第一启动组;>ap3,且≤ap3,所述数据整合模块判定第i1+1待启动项si1+1至第i2待启动项si2为第二启动组,依次类推直至≤ap3,所述数据整合模块判定第待启动项si1至第n待启动项sn为第k启动组。

35、进一步地,所述步骤s4包括:

36、s41,自定义bean名称生成器customerbeannamegenerator ,让其实现beannamegenerator接口,重写 generatebeanname方法,实现根据类名获取bean名称前缀,并生成bean名称的逻辑。

37、s42,自定义customerconfigurationclassbeandefinitionreader 重写 configurationclassbeandefinitionreader#loadbeandefinitionsforbeanmethod 方法,实现对@bean注解,根据类名获取bean名称前缀,并生成bean名称的逻辑;

38、s43,自定义映射处理器customerhandlermapping,让其继承requestmappinghandlermapping,重写 getmappingformethod 方法,以实现根据包名获取url前缀,并替换原始url逻辑。

39、s44,自定义customerautowiredannotationbeanpostprocessor 后置处理器重写autowiredannotationbeanpostprocessor的postprocessproperties方法,在执行metadata#inject 前将当前类名存入线程上下文,以便后续处理@value属性注入获取类名信息。

40、与现有技术相比,本发明的有益效果在于,本发明通过改造springboot源码,使不同的springboot 项目的bean名称,springmvc暴露的url地址和配置文件配置项实现了前缀隔离,最终多个springboot项目在一个spring容器中隔离运行。达到了以一个jvm进程运行多个springboot的效果。

41、进一步地,在进行改造springboot源码前,对待启动的springboot进行分组,通过共存资源包确定分组详情,保障了同一组内的数据调动重复度降低,减少cpu在多进程间切换时的能源消耗。

42、进一步地,对于一个小组,通过设置分组数据量评价参数,保障了每组调动的数据与处理的数据在一个平衡的范围,一方面减少了jvm进程的数量,另一方面保障了单个jvm进程运行的流畅性,防止运行的jvm进程过大出现系统卡顿。

43、进一步地,当共存资源包数据量较小时,加大分组数据量评价参数的数值,进一步的减少组数,从而减小了jvm进程的数量,降低了对系统运行时资源的损耗。

44、进一步地,在调动多个公共资源包的数据时,会增大系统运行占比,因此,公共资源包个数越多分组数据量评价参数数值越小,保障了单个jvm进程运行的流畅性,防止运行的jvm进程过大出现系统卡顿。

45、进一步地,对于不存在共存资源包的情况,选择所有待启动项中出现的次数最多的公共资源包进行判定,确定伪共存资源包,并对启动项进行分类,从而减小了jvm进程的数量,降低了对系统运行时资源的损耗。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1