Logo

利用java类加载以及反射-动态加载jar包实现热部署

photo

2023年09月15日

利用java类加载以及反射-动态加载jar包实现热部署

业务背景:
1.a.jar中的test方法依赖两个其他的jar包分别为b.jar和c.jar,类路径com.Product
2.a.jar中的test方法调用b.jar的test方法,使a产品加工成b产品,再调用c.jar中的test方法使b产品加工成c产品。由于线上环境活动频繁变动,所以使用类加载以及反射实现更新应用而不重启应用的热部署。
代码实现如下:

`
/**

  • This is the entrance of the test program. please do not modify the modifiers

  • of this class and methods. Please do not modify the input and output

  • parameters.

  • @author tom
    */
    public class Test {

    public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException, MalformedURLException, ClassNotFoundException {
    new Test().test(new File(“b.jar”),new File(“b.jar”),“helloWorld!”);
    }
    /**

    • By calling this function. Call the functions in the three jar packages and

    • return data.

    • @param jarFileB

    • @param jarFileC

    • @param text original string

    • @return final decrypted string
      */
      public String test( File jarFileB, File jarFileC, String text) throws MalformedURLException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
      URL urlB = new URL(“file:”+jarFileB.getPath());
      URLClassLoader classLoaderA = new URLClassLoader(new URL[]{urlB}, Thread.currentThread()
      .getContextClassLoader());
      Class<?> product = classLoaderA.loadClass(“com.Product”);
      //获取实例
      Object obj = product.newInstance();
      //获取方法
      Method method=product.getDeclaredMethod(“test”,String.class);
      //执行方法
      Object result1 = method.invoke(obj, text);

      Object result2 = execute(jarFileC, result1.toString());
      execute(new File(“a.jar”),result2.toString());

      // TODO According to the requirements , write the implementation code.
      return null;

    }

    private Object execute(File file,String text) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException, InstantiationException, ClassNotFoundException, MalformedURLException {
    URL url1 = new URL(“file:”+file.getPath());
    URLClassLoader classLoaderA = new URLClassLoader(new URL[]{url1}, Thread.currentThread()
    .getContextClassLoader());
    Class<?> product = classLoaderA.loadClass(“com.Product”);
    //获取实例
    Object obj = product.newInstance();
    //获取方法
    Method method=product.getDeclaredMethod(“test”,String.class);
    //执行方法
    Object result = method.invoke(obj, text);
    return result;
    }

}`)

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它
所有附件
该文章没有附件.
本文为原创文章,请注意保留出处!

热门文章

无法握住的故土 在我们心灵最温暖的角落,总有一寸土地是属于故乡的。虽然我们看似已远离故土,可骨子里对故乡的依恋却是从未冷却过。我们无论漂泊他乡,还是在繁华都市平步青云,可故乡的悠悠情思总会潜入梦乡与你缠绵。是儿时那一缕缕茉莉的清香萦绕在梦境,也是邻家那已锈迹斑斑的铁壶里,开出艳丽的花儿在梦的边缘摇曳。故土就这样根深蒂固地在我们的灵魂深处烙下深深的印记。 作者:Pastore Antonio
1599 浏览量
EWS(Exchange Service)基本使用(获取个人会议,会议室会议内容,会议室列表,发送会议,修改会议,删除会议) 最近公司要求和exchange服务对接,所以稍微研究了一下官方文档,做出以下总结,欢迎大家补充。先...EWS(ExchangeService)基本使用(获取个人会议,会议室会议内容,会议室列表,发送会议,修改会议,删除会议) 作者:Pastore Antonio
1585 浏览量
Sql Server 部署SSIS包完成远程数据传输 本篇介绍如何使用SSIS和作业完成自动更新目标数据任务。**温馨提示:如需转载本文,请注明...SqlServer部署SSIS包完成远程数据传输 作者:Pastore Antonio
1581 浏览量
SQL Server AG集群启动不起来的临时自救大招 背景前晚一朋友遇到AG集群发生来回切换不稳定的情况,情急之下,朋友在命令行使用命令重启WSFC集群...SQLServerAG集群启动不起来的临时自救大招 作者:Pastore Antonio
1573 浏览量
windows 下安装 memcahce 官网上并未提供Memcached的Windows平台安装包,我们可以使用以下链接来下载,你需...windows下安装memcahce 作者:Pastore Antonio
1572 浏览量