
本发明涉及信息,特别涉及一种基于spring boot打包插件的类加载隔离方法、装置、设备及介质。
背景技术:
1、目前,在spring boot(一种开源应用框架)项目中,可以通过maven(即项目管理工具)或gradle(即项目自动化构建开源工具)的依赖排除功能来排除引起冲突的依赖,使用maven shade plugin(即maven阴影插件)来重新打包应用程序,并重命名冲突的类;使用maven的dependency:tree命令或gradle的dependencies任务来分析项目的依赖树,找出冲突的依赖。但使用这种方法,需要深入了解依赖关系,学习成本高,而且命名类可能会导致与其他第三方的内部实现不兼容。
2、由上可见,如何简单高效地处理类加载冲突是目前亟待解决的问题。
技术实现思路
1、有鉴于此,本发明的目的在于提供一种基于spring boot打包插件的类加载隔离方法、装置、设备及介质,能够简单高效地处理类加载冲突。其具体方案如下:
2、第一方面,本技术提供了一种基于spring boot打包插件的类加载隔离方法,包括:
3、利用双亲委派机制创建第一类加载器和第二类加载器;所述第一类加载器为子类加载器;所述第二类加载器为父类加载器且与所述第一类加载器之间存在父子关系;
4、基于spring boot打包插件并利用预设策略匹配算法将满足预设高优先级条件的所述软件包分配至所述第一类加载器,以得到第一目标类加载器,并将满足预设低优先级条件的所述软件包分配至所述第二类加载器得到第二目标类加载器;
5、基于所述第一目标类加载器和所述第二目标类加载器对spring boot原类加载器进行替换,以得到类加载器隔离插件,并利用所述类加载器隔离插件对发生类冲突的目标软件包进行类加载隔离。
6、可选的,所述利用双亲委派机制创建第一类加载器和第二类加载器,包括:
7、利用所述双亲委派机制中子类加载器和父类加载器的父子关系创建spring boot项目中存在父子关系的第一类加载器和所述第二类加载器。
8、可选的,所述基于spring boot打包插件并利用预设策略匹配算法将满足预设高优先级条件的所述软件包分配至所述第一类加载器,以得到第一目标类加载器,并将满足预设低优先级条件的所述软件包分配至所述第二类加载器得到第二目标类加载器,包括:
9、利用spring boot打包插件对所述spring boot应用进行打包,以得到所述软件包;
10、对所述软件包进行优先级判断,基于判断结果并利用预设策略匹配算法将满足预设高优先级条件的所述软件包分配至所述第一类加载器,以得到第一目标类加载器,并将满足预设低优先级条件的所述软件包分配至所述第二类加载器得到第二目标类加载器。
11、可选的,所述对所述软件包进行优先级判断,基于判断结果并利用预设策略匹配算法将满足预设高优先级条件的所述软件包分配至所述第一类加载器,以得到第一目标类加载器,并将满足预设低优先级条件的所述软件包分配至所述第二类加载器得到第二目标类加载器,包括:
12、判断所述软件包是否满足预设高优先级条件,若所述软件包满足预设高优先级条件,则利用预设策略匹配算法将满足预设高优先级条件的所述软件包分配至所述第一类加载器,以得到第一目标类加载器;
13、若所述软件包不满足预设高优先级条件,则将所述软件包作为满足预设低优先级条件的所述软件包,并利用预设策略匹配算法将满足预设低优先级条件的所述软件包分配至所述第二类加载器得到第二目标类加载器。
14、可选的,所述基于所述第一目标类加载器和所述第二目标类加载器对springboot原类加载器进行替换,以得到类加载器隔离插件,包括:
15、获取与spring boot原类加载器对应的加载器入口,通过所述第一目标类加载器和所述第二目标类加载器对所述加载器入口进行替换,以得到类加载器隔离插件。
16、可选的,所述利用所述类加载器隔离插件对发生类冲突的目标软件包进行类加载隔离,包括:
17、若存在发生类冲突的目标软件包,则利用所述类加载器隔离插件中的所述第一类加载器对所述目标软件包进行加载;
18、若所述第一类加载器加载不到所述目标软件包,则利用所述类加载器隔离插件中的所述第二类加载器对所述目标软件包进行加载,以得到所述目标软件包。
19、可选的,所述利用所述类加载器隔离插件对发生类冲突的目标软件包进行类加载隔离,包括:
20、在spring boot项目中引入所述类加载器隔离插件,并基于所述类加载器隔离插件对所述spring boot项目进行插件配置以及打包操作,以得到目标spring boot项目;
21、利用所述目标spring boot项目对发生类冲突的目标软件包进行类加载隔离。
22、第二方面,本技术提供了一种基于spring boot打包插件的类加载隔离装置,包括:
23、类加载器创建模块,用于利用双亲委派机制创建第一类加载器和第二类加载器;所述第一类加载器为子类加载器;所述第二类加载器为父类加载器且与所述第一类加载器之间存在父子关系;
24、软件包分配模块,用于基于spring boot打包插件并利用预设策略匹配算法将满足预设高优先级条件的所述软件包分配至所述第一类加载器,以得到第一目标类加载器,并将满足预设低优先级条件的所述软件包分配至所述第二类加载器得到第二目标类加载器;
25、类加载替换模块,用于基于所述第一目标类加载器和所述第二目标类加载器对spring boot原类加载器进行替换,以得到类加载器隔离插件,并利用所述类加载器隔离插件对发生类冲突的目标软件包进行类加载隔离。
26、第三方面,本技术提供了一种电子设备,包括:
27、存储器,用于保存计算机程序;
28、处理器,用于执行所述计算机程序,以实现前述的基于spring boot打包插件的类加载隔离方法。
29、第四方面,本技术提供了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述的基于spring boot打包插件的类加载隔离方法。
30、本技术利用双亲委派机制创建第一类加载器和第二类加载器;所述第一类加载器为子类加载器;所述第二类加载器为父类加载器且与所述第一类加载器之间存在父子关系;基于spring boot打包插件并利用预设策略匹配算法将满足预设高优先级条件的所述软件包分配至所述第一类加载器,以得到第一目标类加载器,并将满足预设低优先级条件的所述软件包分配至所述第二类加载器得到第二目标类加载器;基于所述第一目标类加载器和所述第二目标类加载器对spring boot原类加载器进行替换,以得到类加载器隔离插件,并利用所述类加载器隔离插件对发生类冲突的目标软件包进行类加载隔离。
31、由上可见,本技术利用双亲委派机制自定义存在父子关系的第一类加载器和第二类加载器,利用预设策略匹配算法对软件包进行优先级分配,将满足预设高优先级的所述软件包分配至所述第一类加载器,满足预设低优先级的所述软件包分配至所述第二类加载器,通过所述第一目标类加载器和所述第二目标类加载器替换spring boot原类加载器,以得到类加载器隔离插件。这样一来,利用所述类加载器隔离插件对发生类冲突的目标软件包进行类加载隔离,解决了类冲突问题。以插件化的方式参与构建过程,对现有应用的结构几乎无影响,且配置简单,降低了开发者的学习成本和集成难度,减少了人为干预。