一、业务场景
在有些业务场景下,需要SpringBoot来动态加载jar中的class文件,自动往spring容器中添加新的bean;如物联网设备上传的信息用物模型来解析,用java来解析物模型,但用户的设备千差万别,解析设备的物模型不可能包罗万象,设备往物联网平台上传的数据格式也是千差万别,这时就可以让用户自已实现解析物模型的java代码,然后打成jar包,上传到物联网平台,物联网平台就可以解析当前用的设备信息了。
二、准备工作
1、生成的jar需要布署在nginx当中,直接通过url地址可以下载,所以本次使用要用到nginx,nginx的下载地址,放在本博文最后,可以在后面查看下载
在conf文件夹下 nginx的配置如下
启动nginx,双击nginx.exe即可,复制
http://127.0.0.1:5000/user-1.0.jar
到浏览器下,可以下载user-1.0.jar
三、maven代码结构
说明:
1、user模块打成jar包,server微服务加载user打成的jar包user-1.0.jar 2、具体原理如下:inter是公共的模块,里面只有一个抽像CommonService,然后user模块里面的teacherService来实现这个抽像类,然把把user打成jar包供server服务来动态加载teacherService,加载后,就可以使用teacherService了 3、user-1.0.jar布署在nginx上,可以直接通过http://127.0.0.1:5000/user-1.0.jar下载,server模中,是直接访问http://127.0.0.1:5000/user-1.0.jar这个地址来读jar包的
四、相关核心代码
1、constroller中加载jar包,执行加载成功的teacherService
2、加载jar包
3、TeacherService中的代码
五、测试
1、没中加载jar包的情况下,执行teacherService的deal方法,http://localhost:8080/test/execute?serviceName=teacherService
结果报错,找不到对应的bean,如下截图
2、加载jar包 http://localhost:8080/test/load?urlStr=http://127.0.0.1:5000/user-1.0.jar
3、再次执行 http://localhost:8080/test/execute?serviceName=teacherService
六、完整代码
下载地址:链接:https://pan.baidu.com/s/14JOLJiwQJWieOWgaj8V2BA?pwd=wiux
提取码:wiux