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;
    }
}

這樣我們就實現了動態擴展,使用這種方式,我們就可以使用插件的方式對我們的微服務應用進行擴展

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章