欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Springboot 启动jar包,指定外部配置文件

程序员文章站 2022-05-02 09:50:25
...

有很多场景下,为了方便修改配置文件,在打包时,会选择将配置文件放到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:/

这种扫描顺序使得你可以通过自己的自定义配置来修改默认的配置项.

相关标签: java