在Spring Boot中如何添加类路径
在之前研究MessageSource相关时,我需要将负责管理消息的属性文件放置在Spring Boot项目的外部。同时需要重新加载Spring的MessageSource。
在那时候,我调查了如何在Spring Boot中添加类路径,并发现了几种方法,我打算总结一下。
不同的启动方法可能导致不同的设置,也可能有几种设置方法。
环境
- Spring Boot 2.0.6.RELEASE
如果要通过mvn spring-boot:run命令来启动。
如果使用Spring Boot Maven插件来启动应用程序,可以通过以下任意一种方法进行添加。
使用启动参数进行指定
您可以使用逗号分隔来指定多个路径。
mvn spring-boot:run -Dspring-boot.run.folders=[パス]
可以在pom.xml中写入。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<folders>
<folder>[パス]</folder>
</folders>
</configuration>
</plugin>
对于可执行的 Jar 文件来说
如果要创建可执行的Jar文件并使用java命令进行执行的话。
顺便提一句,按以下方式执行也不会添加类路径。
java -cp [パス] -jar jarFile
如果在java命令中指定了-jar,那么会忽略-cp。
修改主类
如果您使用PropertiesLauncher作为Main类,那么您可以添加类路径。
如果使用了Spring Boot Maven插件,可以通过在布局中设置ZIP或DIR来使用PropertiesLauncher。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
</configuration>
</plugin>
接下来是关于添加类路径的设置,有几种设置方法。
我们将按优先级从高到低进行记录。
在系统属性中进行设定
在启动时,可以使用-Dloader.path选项来添加类路径。
java -Dloader.path=[パス] -jar jarFile
顺便提一下,我尝试在-jar后面以-Dloader.path=[路径]的形式运行,但没有成功,让我困扰了一段时间。
java命令必须按照java [-选项] -jar jar文件 [参数…]的顺序进行指定。
在环境变量中指定
请将环境变量LOADER_PATH设置为指定值。
只需使用标准的java命令启动即可完成。
set LOADER_PATH=[パス]
export LOADER_PATH=[パス]
在属性文件中指定。
将配置文件命名为loader.properties,并将其放置在resources文件夹下。
启动时可以使用普通的java命令即可。
loader.path=[パス]
此外,根据设置,文件名和位置也可以进行更改。
在清单文件中指定
可以通过在Manifest文件中指定Loader-Path,来添加类路径。
启动可使用普通的java命令。
如果使用Maven Jar插件,按照以下方式进行设置就可以了。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Loader-Path>[パス]</Loader-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
总结
在使用可执行的Jar文件时,有几种方法可供选择,但我认为最好的是在启动时使用可配置的系统属性或环境变量。
如果是属性文件或清单文件的话,代码中会直接写入路径,这样在每个环境中的不同设置会变得很麻烦。
或者,可以根据不同的环境创建属性文件,并在启动时通过系统属性指定属性文件的名称。