• SPRINGBOOT 热加载JAR包


    1.概要

    springboot 的程序一般打包程成jar包。我们有些情况下,我们需要对程序进行扩展,我们没办法对已打包的程序进行修改。

    我们希望的做法是:

    1.将我们的一些接口打包。

    2.在扩展包时,我们引入接口包。

    3.实现接口后,打成JAR包。

    4.动态加载这些jar包,让后将我们的类动态注册到spring容器中。

    2.实现过程

    2.1 定义接口

    package com.redxun.handler;
    
    public interface IDemoHandler {
    
        String handler(String name);
    }

    我们将这个接口打包。

    2.2 实现接口

    <dependency>
                <groupId>org.redxun</groupId>
                <artifactId>interface</artifactId>
                <version>1.0</version>
            </dependency>

    引入接口包

    package com.example.demo;
    
    import com.redxun.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;
        }
    }

    这样我们就实现了动态扩展,使用这种方式,我们就可以使用插件的方式对我们的微服务应用进行扩展

  • 相关阅读:
    三,遍历方法 1$.each(数组/对象,function处理); //$对象 调用的 2$(选择器).each(function处理); //jquery对象 调用的
    二,jquery对象 与 dom对象关系
    一,$符号的由来
    2高级js总结-------数组
    面试归来
    Http(Tcp/IP)通信建立中的三次握手
    类似于桌面启动器
    代码写Android应用的背景颜色
    靠谱的a与b互换
    day21-类的组合
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/15717650.html
Copyright © 2020-2023  润新知