排除配置文件不打包到 JAR
原创2024年1月12日约 676 字大约 2 分钟
问题引入
配置文件中存在K:V格式的配置,打包的时候在jar中存在了配置文件,又将配置文件打到外部的conf下,启动的时候使用了该conf目录下的配置,但是默认会将jar中的文件也读取一遍,导致
K:V这种格式的就出现了问题,最后合并了jar外面的和里面的所有配置。由于代码已完善,再改动代码不合适
方案1
修改启动脚本中:
-Dspring.config.additional-location 为 -Dspring.config.location
-Dspring.config.location
作用:
完全覆盖 Spring Boot 默认的配置文件搜索路径。
如果指定了该参数,Spring Boot 不会再加载
application.properties
或application.yml
等默认位置的配置文件(如classpath:/
、file:./config/
、file:./
等)。-Dspring.config.additional-location=./conf/ 此时 仅 加载
./conf/
目录下的配置文件(如application.yml
),忽略默认路径的配置。
-Dspring.config.additional-location
作用:
- 追加额外的配置文件路径,不覆盖默认搜索路径。
- Spring Boot 会先加载默认路径的配置,再加载
additional-location
指定的配置(后者优先级更高)。
关键区别
参数 | 是否覆盖默认路径 | 优先级顺序 | 典型用途 |
---|---|---|---|
-Dspring.config.location | ✅ 是 | 仅加载指定路径 | 完全自定义配置路径 |
-Dspring.config.additional-location | ❌ 否 | 默认路径 + 额外路径(后者优先) | 追加配置,部分覆盖默认值 |
方案2
解决办法是 打包时 不将配置文件打到jar中
appoint:
676: value
679: value
608: value
617: value
@echo off
chcp 65001 >nul
start javaw -jar -Xms512m -Xmx1024m -Dspring.profiles.active=sit -Dspring.config.additional-location=./conf/ -Dlogging.config=./conf/logback.xml xxx.jar
echo 程序已启动,窗口将在5秒后关闭...
timeout /t 5 /nobreak
exit
pom文件增加
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>make-ZIP</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<skipAssembly>false</skipAssembly>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/resources/assembly/assembly_ZIP.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- 1. 排除配置文件不打包到 JAR -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<excludes>
<exclude>**/application.properties</exclude>
<exclude>**/application.yml</exclude>
</excludes>
</configuration>
</plugin>
assembly_ZIP.xml
<assembly>
<id>zipAssembly</id>
<formats>
<!-- <format>tar.gz</format> -->
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>src/main/resources/assembly/bin</directory>
<outputDirectory></outputDirectory>
<fileMode>0755</fileMode><!-- 文件权限 -->
<!-- <lineEnding>unix</lineEnding> -->
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0644</fileMode>
<includes>
<include>*.yml</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/resources/assembly/config</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0644</fileMode>
<includes>
<include>logback.xml</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/resources/assembly/logs</directory>
<outputDirectory>logs</outputDirectory>
<fileMode>0644</fileMode>
</fileSet>
</fileSets>
<files>
<file>
<source>${project.build.directory}/${project.build.finalName}.jar
</source>
</file>
</files>
</assembly>
贡献者
wangjialin