在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文件时,有几种方法可供选择,但我认为最好的是在启动时使用可配置的系统属性或环境变量。

如果是属性文件或清单文件的话,代码中会直接写入路径,这样在每个环境中的不同设置会变得很麻烦。

或者,可以根据不同的环境创建属性文件,并在启动时通过系统属性指定属性文件的名称。

广告
将在 10 秒后关闭
bannerAds