米鼠商城

多块好省,买软件就上米鼠网

最新项目

  • 加油站系统开发

    预算:$150,000.00

    类别:软件开发>企业软件

    15355人关注
  • 筹金结算系统

    预算:$35,000.00

    类别:软件开发>其他软件开发

    15522人关注
  • 物业项目开发

    预算:$40,000.00

    类别:移动应用>其他移动应用

    17054人关注
  • CRM系统

    预算:$60,000.00

    类别:网站建设>网站开发

    19154人关注
  • 微信公众号账号开发

    预算:$18,000.00

    类别:移动应用>其他移动应用

    19371人关注
  • 网站商城开发

    预算:$50,000.00

    类别:网站建设>网站开发

    18363人关注

人才服务

靠谱的IT人才垂直招聘平台

JarsLink 模块卸载

  • xx
  • 8
  • 2019-06-12 16:01

JarsLink版本:1.6.1.20180301

在前两篇介绍中,主要说明了jarslink动态加载jar包的方式及部分实现代码,在测试的过程中,发现已经加载的jar包,卸载模块后不能解除stream引用,也就是已经加载的jar包,卸载模块后不能删除已经加载的jar包。

经过测试,结果如下:

需要在卸载模块的时候,将加载过程中使用的classLoader关闭并设置为null,并执行一次System.gc();测试代码如下:

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import com.alipay.jarslink.api.Action;

public class TestLoad {
    private static URLClassLoader loader = null;
    private static Class<?> c = null;
    private static Action<String, Boolean> o = null;
    private static List<URL> urls = new ArrayList<URL>();
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        File f = new File("C:\\Users\\luqiye\\eclipse-workspace-other\\JarLinkDemo\\build\\lib1");
        if(!f.exists()){
            System.out.println(f.getAbsolutePath()+" not exist");
            return;
        }
        urls = new ArrayList<URL>();
        if(f.isFile()) {
            try{urls.add(f.toURI().toURL());}catch(Exception e) {}
        }else if(f.isDirectory()) {
            addURL(urls,f);
            if(urls.size() == 0) {
                System.out.println(f.getAbsolutePath()+" not have jars");
                return;
            }
        }else {
            System.out.println(f.getAbsolutePath()+" not file or dir");
            return;
        }
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            String line = sc.nextLine();
            if("q".equals(line) || "quit".equals(line) || "exit".equals(line) || "e".equals(line)) {
                break;
            }else if("load".equals(line)) {
                loadModule();
            }else if("unload".equals(line)) {
                unLoadModule();
            }else if("start".equals(line)) {
                startModule();
            }else if("stop".equals(line)) {
                stopModule();
            }else if("print".equals(line)) {
                printModule();
            }
        }
    }
    private static void unLoadModule() {
        if(o != null) {
            try{o.execute("stop");}catch(Exception e) {}
            o = null;
        }
        if(c != null) {
            c = null;
        }
        if(loader != null){
            try{loader.close();}catch(Exception e) {
                e.printStackTrace();
            }
            loader = null;
        }
        System.gc();
    }
    private static void printModule() {
        // TODO Auto-generated method stub
        
    }
    private static void stopModule() {
        if(o == null)
            return;
        System.out.println("Test: result--" + o.execute("stop"));
    }
    private static void startModule() {
        if(o == null)
            return;
        System.out.println("Test: result--" + o.execute("init"));
        System.out.println("Test: result--" + o.execute("start"));
    }
    private static void loadModule() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        loader = new URLClassLoader(urls.toArray(new URL[] {}));
        c = loader.loadClass("com.hanbon.jarlink.TestOne");
        o = (Action<String, Boolean>)c.newInstance();
    }
    //一个小递归
    private static void addURL(List<URL> result,File folder) {
        for(File f : folder.listFiles()) {
            if(f.isDirectory()) {
                addURL(result,folder);
            }else if(f.isFile() && f.getName().endsWith(".jar")) {
                try {
                    result.add(f.toURI().toURL());
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 



这里给大家推荐一个在线软件复杂项交易平台:米鼠网 https://www.misuland.com

米鼠网自成立以来一直专注于从事软件项目人才招聘软件商城等,始终秉承“专业的服务,易用的产品”的经营理念,以“提供高品质的服务、满足客户的需求、携手共创双赢”为企业目标,为中国境内企业提供国际化、专业化、个性化、的软件项目解决方案,我司拥有一流的项目经理团队,具备过硬的软件项目设计和实施能力,为全国不同行业客户提供优质的产品和服务,得到了客户的广泛赞誉。

猜你喜欢

评论留言