0
点赞
收藏
分享

微信扫一扫

我写的dubbo扩展jar包如何无侵入的给别人使用


有这么一个场景, 我写了一个dubbo spi扩展jar包 ​​dubbo-ext.jar​​; 这个Jar包是不可执行包(没有main函数), 它的作用是对现有运行的dubbo服务做一些增强;

那么这样的一个扩展包,要符合即插即用的原则;要无侵入的增强;

正常情况下我们可能直接在pom文件依赖一下这个包;因为无侵入原则,那么这条路就不能走了; 那可怎么办呢?

1.Tomcat启动方式

如果目标服务是用Tomcat启动的,那么很简单,我们可以直接把我们的扩展jar包​​dubbo-ext.jar​​ 扔进lib文件夹下面;Tomcat会自动为我们加载这些jar包;

2. java -jar 启动方式

我们现在大部分的项目都会选择SpringBoot框架; 最常用的打包方式是打成 ​​jar​​​ 包;然后使用​​javar -jar XXX.jar​​​ 的启动方式; 但是这样的话, jar包已经打好了, 我们怎么把我们的扩展包​​dubbo-ext.jar​​​ 放入到 ​​XXX.jar​​中呢?

  1. 解压​​XXX.jar​​包,然后把我们的扩展包​​dubbo-ext.jar​​ 扔到 ​​BOOT-INF/lib​​中;

    然后重新打包; 这种方式应该是也可以实现的; 但是却比较繁琐;这里推荐第二种方式

  2. 使用命令​​jar -uf0 XXX.jar BOOT-INF/lib/​​ 直接将我们的扩展包​​dubbo-ext.jar​​直接放到​​XXX.jar​​中的 ​​BOOT-INF/lib/​​中; 下面我们具体详细讲一下这个操作步骤

jar 命令参数说明

我写的dubbo扩展jar包如何无侵入的给别人使用_jar

看到上面的参数选项; 我们决定使用 ​​-uf0​​ 来操作;

  • u: 更新现有的档案
  • f: 指定档案文件名
  • 0:仅存储;不适用任何ZIP压缩

操作流程

我写的dubbo扩展jar包如何无侵入的给别人使用_jar_02

图中​​features-common.jar​​ 是我们的扩展包;

​features-services-0.0.1-SNAPSHOT.jar​​我们的可执行包;

我们要把​​features-common.jar​​包放到 ​​features-services-0.0.1-SNAPSHOT​​中;

  • 我们可以先解压看看 ​​features-services-0.0.1-SNAPSHOT​​ 里面是什么样的

    ​jar -xf features-services-0.0.1-SNAPSHOT​​;

    解压出来是下面的; 所有的依赖jar都在​​BOOT-INF/lib​​ 中;

    我写的dubbo扩展jar包如何无侵入的给别人使用_jar_03

    那么这个​​BOOT-INF/lib​​就是我们的目标路径;

    Ok,知道了路径,我们把刚刚解压之后的文件全部删除掉;(只是解压出来看看路径而已)

  • 在当前路径创建目标文件路径 ​​mkdir -p BOOT-INF/lib​​ ;
  • 然后把扩展包​​features-common.jar​​放到这个路径下,如下图

    我写的dubbo扩展jar包如何无侵入的给别人使用_jar_04

    这里很重要,路径一定要对!

  • 执行命令​​jar -uf0 features-service-0.0.1-SNAPSHOT.jar BOOT-INF/lib/​

    执行这条命令的路径一定要对;就在​​BOOT-INF​​文件夹同级别

    我写的dubbo扩展jar包如何无侵入的给别人使用_扩展包_05

  • 加载完成!

执行完毕之后 ,我们可以校验一下是否放入到了 ​​features-services-0.0.1-SNAPSHOT.jar​​​; 所以我们解压一下刚刚更新过的 ​​features-services-0.0.1-SNAPSHOT.jar​​;

``

我写的dubbo扩展jar包如何无侵入的给别人使用_jar_06

可以看到我们刚刚的扩展jar包 ​​features-common.jar​​ 已经加载到了 jar包中;


​jar -uf0 features-service-0.0.1-SNAPSHOT.jar BOOT-INF/lib/​

最容易出错的地方就是后面的文件夹路径了; 这个可不是你随便写的;

你这个路径必须跟​​features-service-0.0.1-SNAPSHOT.jar​​解压之后存放依赖jar的路径保持一致的!不然就算加载成功了,路径不对,也使用不了 !

如果目标文件是一个war包呢

同理~; war包解压看看;

我写的dubbo扩展jar包如何无侵入的给别人使用_扩展包_07

把路径改成 ​​WEB-INF/lib​​ 就行了!!

如果是一个zip包呢?

原理都是一样的,可以先解压看看jar的路径;

亲测ok!

我写的dubbo扩展jar包如何无侵入的给别人使用_jar_08



举报

相关推荐

0 条评论