Springboot 启动jar包,指定外部配置文件
有很多场景下,为了方便修改配置文件,在打包时,会选择将配置文件放到jar包外部,可以选择在pom.xml文件中使用如下配置,将resources目录下的配置文件抽取到外部目录:
<build>
<!-- 打包名称 -->
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
<!-- copy资源文件 -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/i18n/**</exclude>
<exclude>**/mybatis/**</exclude>
<exclude>**/public/**</exclude>
<exclude>**/static/**</exclude>
<exclude>**/templates/**</exclude>
</excludes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/resources</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- 打jar包时忽略配置文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/application*.yml</exclude>
<exclude>**/application*.properties</exclude>
<exclude>**/logback*.xml</exclude>
<exclude>**/bootstrap.yml</exclude>
<exclude>**/setting.properties</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
找到项目target目录即可看到resources目录以及打出的jar文件。
执行下面的命令,即可启动项目:
java -jar -Dspring.config.location=E:/Workspace/projects/target/resources/ ./xxx.jar
注意:1. 如果外部文件指定的是目录,那么-Dspring.config.location配置的地址必须以"/"结尾,表名这个配置是一个目录,而非单个文件;
2. 如果想要指定单个文件,可以使用-Dspring.config.location=E:/Workspace/projects/target/resources/application.properties这种方式来指明只需要加载这个配置文件内容
3. 当然,你可以可以将配置文件放在与启动的jar包同级目录,或者在启动的jar的同级目录下建一个名为config的目录,然后将配置文件放到里面,然后直接使用此命令启动,spring默认会去./config目录中查询
java -jar ./xxx.jar
补充说明
配置文件的位置搜索是逆向的. 默认情况下,配置文件的顺序是 classpath:/,classpath:/config/,file:./,file:./config/. 文件查找的结果顺序将是这样的:
file:./config/
file:./
classpath:/config/
classpath:/
如果使用 spring.config.location 来自定义配置文件位置, 它将替换默认的配置文件位置.比如说, 如果 spring.config.location 设置为:classpath:/custom-config/,file:./custom-config/, 那么配置文件的扫描/查询顺序将会是:
file:./custom-config/
classpath:custom-config/
另外,如果自定义的配置文件路径是通过 spring.config.additional-location 设置的, 它会作为默认配置路径的扩展配置路径来使用. 扩展的配置路径会比默认的配置优先被扫描到. 比如说, 如果设置了扩展的配置文件所在路径为: classpath:/custom-config/,file:./custom-config/ , the 那么查找路径将会是下面的顺序:
file:./custom-config/
classpath:custom-config/
file:./config/
file:./
classpath:/config/
classpath:/
这种扫描顺序使得你可以通过自己的自定义配置来修改默认的配置项.
推荐阅读
-
Maven将依赖包、jar/war包及配置文件输出到指定目录
-
关于Springboot打成JAR包后读取外部配置文件的问题
-
Springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到
-
Spring Boot打jar包后配置文件的外部优化配置方法
-
springboot jar包外置配置文件的解决方法
-
springboot 运行 jar 包读取外部配置文件的问题
-
SpringBoot 加载jar外部yml配置文件
-
springboot 打jar 包部署时 读取外部配置文件
-
springboot 打jar 包部署时 读取外部配置文件
-
使用springboot的jar包能够以service方式启动