1. 需求
由于 SpringBoot 打包后,默認(rèn)是不能加載外部的jar文件,只能默認(rèn)加載 yml 文件。
想通過外部的 jar 來擴(kuò)展此微服務(wù)的能力,而且主 jar 升級(jí)更新不受影響。這種方式適用于已經(jīng)有了底座服務(wù)。但是底座服務(wù)不滿足現(xiàn)有需求,可以通過外部的 jar 來擴(kuò)展相關(guān)業(yè)務(wù)。
2. 實(shí)現(xiàn)
由于SpringBoot 默認(rèn)啟動(dòng)類是 org.springframework.boot.loader.JarLauncher, 具體看查看打包后的jar 中的 META-INF/xxx/MANIFEST.MF
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: jerry
Start-Class: lsof.fun.test.MainApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.2.8.RELEASE
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_60
Main-Class: org.springframework.boot.loader.JarLauncher
而 JarLauncher 是無法配置相關(guān)外部依賴環(huán)境,需要更換為 PropertiesLauncher,因此需要修改打包配置,增加 layout 與finalName 相關(guān)配置,如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<finalName>auth-test</finalName>
<layout>ZIP</layout>
</configuration>
</execution>
</executions>
</plugin>
啟動(dòng)腳本:
java -Dloader.path=$PATH -jar auth-test.jar
- $PATH:可以是相對(duì)路徑可以是絕對(duì)路徑,可以是具體的jar或者文件夾
執(zhí)行后即可加載相關(guān)文件到 classpath了,如果jar中存在自動(dòng)裝配類,也會(huì)自動(dòng)加載。