SPRINGBOOT 热加载JAR包
1.概要
springboot 的程序一般打包程成jar包。我们有些情况下,我们需要对程序进行扩展,我们没办法对已打包的程序进行修改。
我们希望的做法是:
1.将我们的一些接口打包。
2.在扩展包时,我们引入接口包。
3.实现接口后,打成JAR包。
4.动态加载这些jar包,让后将我们的类动态注册到spring容器中。
2.实现过程
2.1 定义接口
package com.example.handler; public interface IDemoHandler { String handler(String name); }
我们将这个接口打包。
2.2 实现接口
<dependency> <groupId>org.example</groupId> <artifactId>interface</artifactId> <version>1.0</version> </dependency>
引入接口包
package com.example.demo; import com.example.handler.IDemoHandler; public class DemoHandler implements IDemoHandler { @Override public String handler(String s) { System.err.println("hello world"); return "hello:" +s; } }
实现接口。
2.3 动态加载JAR包
@RestController @RequestMapping("/user/org/osUser") public class DemoController { @GetMapping(value = "loadClass") public String loadClass() throws ClassNotFoundException { String pluginClass="com.example.demo.DemoHandler"; ClassLoader classLoader = ClassLoaderUtil.getClassLoader("file:/D:/demo-1.0.jar"); Class<?> clazz = classLoader.loadClass(pluginClass); SpringUtil.registerBean("demoHandler",clazz); IDemoHandler plugin = (IDemoHandler)SpringUtil.getBean("demoHandler"); String str= plugin.handler("RAY"); return str; } }
这样我们就实现了动态扩展,使用这种方式,我们就可以使用插件的方式对我们的微服务应用进行扩展