zoukankan      html  css  js  c++  java
  • 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;
        }
    }

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

  • 相关阅读:
    hdoj Last non-zero Digit in N! 【数论】
    spin_lock &amp; mutex_lock的差别?
    20140514,微软5月14日公布8个安全补丁
    教你用笔记本破解无线路由器password
    SSL工作原理
    MS-SQLSERVER中的MSDTC不可用解决方法
    grub2手动引导ubuntu
    用递归翻转一个栈 Reverse a stack using recursion
    腾讯面试
    AngularJS移动开发中的坑汇总
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/15717650.html
Copyright © 2011-2022 走看看