SpringBoot的配置文件加载顺序以及如何获取jar包里的资源路径
一、读取配置文件的四种方式
这四种配置文件放置方式的读取优先级依次递减,具体可以查看官方文档。
1.1jar包同级目录下的config文件夹里的配置文件
其实我以前就见过这种方式了,只是不知道怎么做的,这样便于修改服务器上的配置文件。
可以使用maven-source-plugin插件,然后运行命令mvn clean package将配置文件提取到项目外指定文件夹下。
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <version>${maven-resources-plugin.version}</version>
- <executions>
- <execution>
- <id>copy-resources</id>
- <phase>package</phase>
- <goals>
- <goal>copy-resources</goal>
- </goals>
- <configuration>
- <outputDirectory>${basedir}/target/config/</outputDirectory>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <includes>
- <include>**/*.properties</include>
- </includes>
- </resource>
- </resources>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>${maven-jar-plugin.version}</version>
- <configuration>
- <archive>
- <manifest>
- <addClasspath>true</addClasspath>
- <classpathPrefix>./lib/</classpathPrefix>
- <mainClass>${main-class}</mainClass>
- </manifest>
- </archive>
- <excludes>
- <exclude>**/*.properties</exclude>
- </excludes>
- </configuration>
- </plugin>
以上配置就可以实现将src/main/resources目录下的所有后缀名为properties的文件复制到config文件夹下,同时打包时排除properties文件。
注意:需要将新建项目时自带的spring-boot-maven-plugin插件去掉,否则不能生效。
去掉如下代码:
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
1.2jar包当前目录的配置文件
这里的方法与上面的基本相同,将<outputDirectory>${basedir}/target/config/</outputDirectory>换为<outputDirectory>${basedir}/target/</outputDirectory>即可(假设你的开发工具的输出目录为target)。
1.3classpath/config里的配置文件
这种不需要做特别的配置,只需要在src/main/resources目录下新建一个config文件夹就好了。
1.4直接放在classpath里的配置文件(默认)
一般新建完SpringBoot项目就是这样的。
二、打包时将依赖jar保存到指定路径
在pom.xml文件添加如下内容即可。
2.1将依赖copy到lib目录
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>${maven-dependency-plugin.version}</version>
- <executions>
- <execution>
- <id>copy-dependencies</id>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <outputDirectory>${project.build.directory}/lib/</outputDirectory>
- <includeScope>compile</includeScope>
- </configuration>
- </execution>
- </executions>
- </plugin>
2.2将依赖添加到classpath
打包后获得的示例截图:

三、获取jar包里的资源路径
其实这是个伪命题,因为jar自己就是个文件,如果用代码获取里面a.jar里面的b.jks文件,获得路径就变成了a.jar!/b.jks了。
jar中资源有其专门的URL形式: jar:!/{entry} 。所以,如果jar包中的类源代码用File f=new File(相对路径);的形式,是不可能定位到文件资源的,启动jar包时会报出FileNotFoundException。
所以只有两个选择:
- 打包时将文件放在jar包外,然后通过file:/path/to/b.jks这种形式来获取。
- 通过Class类的getResourceAsStream()方法来获取 ,不过返回的是InputStream并不是路径
可以参考这篇博客:https://blog.csdn.net/li2327234939/article/details/79565772
四、总结
maven插件太多了,maven-assembly-plugin还需要学习一下。
SpringBoot的配置文件加载顺序以及如何获取jar包里的资源路径的更多相关文章
- SpringBoot的配置文件加载顺序和使用方式
1.bootstrap.properties bootstrap.properties 配置文件是由"根"上下文优先加载,程序启动之初就感知 如:Spring Cloud Conf ...
- struts几个配置文件加载顺序_2015.01.04
struts几个配置文件加载顺序: 01:struts-default.xml 02:struts-plugin.xml 03:struts.xml 04:struts.properties 05:w ...
- bash 的配置文件加载顺序
bash配置文件的加载顺序和登陆方式有关,下面先介绍下登陆方式. 1 登陆方式有2种 登陆式SHELL: su - oracle su -l oracle 正常从终端登陆 非登录式SHELL: ...
- struts2配置文件加载顺序
struts2配置文件加载顺序: struts-default.xml/ struts-plugin.xml/ struts.xml/ struts.properties/ web.xml
- 解决maven无法加载本地lib/下的jar包问题(程序包XXX不存在)
这次一个项目用到maven编译,我在本地开发的时候jar包都是放在WEB-INF/lib目录下,通过 BuildPath将jar包导入,然后用MyEclipse中的:maven package命令打成 ...
- 【转】解决maven无法加载本地lib/下的jar包问题(程序包XXX不存在)
原文链接:https://www.cnblogs.com/adeng/p/7096484.html 这次一个项目用到maven编译,我在本地开发的时候jar包都是放在WEB-INF/lib目录下,通过 ...
- @PropertySource加载文件的两种用法以及配置文件加载顺序
第一种: 现在我把资源文件的路径放在application.properties里 config.path=/home/myservice/config.properties @PropertySou ...
- Spring Boot配置文件加载顺序
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.通过spring.config.location改变配置文件的位置 二.外部配置加载顺序 1.使用命令行参数指定加 ...
- hadoop配置文件加载顺序(转)
原文 http://www.cnblogs.com/wolfblogs/p/4147485.html 用了一段时间的hadoop,现在回来看看源码发现别有一番味道,温故而知新,还真是这样的 在使用h ...
随机推荐
- Android NDK JNI WARNING: illegal start byte 0x
今天攻克了JNI WARNING: illegal start byte 0x81这个问题. 问题出现的现象是通过jni调用加密方法,调用之后返回密文内容,结果就出现这个问题. 在国外查找一段时间之后 ...
- VS2008转VS2013时遇到的问题
最近我们要把DPM进行行人检测嵌入到我们的项目里,需要一个高级版本的VS,于是我们要把2008转换成2013,至于为什么没有换成最高级的版本,可能担心会遇到有更多的麻烦吧,毕竟我们的DPM源码是在20 ...
- hiho1079 线段树区间改动离散化
题目链接: hihocoder1079 代码: #include<iostream> #include<cstdio> #include<cstring> #inc ...
- 图像处理之基础---ffmpeg 中的图像缩放
http://blog.csdn.net/bweaglegao/article/details/8540860 http://www.cnblogs.com/acloud/archive/2011/1 ...
- Python 006- python socket编程详细介绍
转自https://blog.csdn.net/rebelqsp/article/details/22109925 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供 ...
- POJ 1183 反正切函数的应用(数学代换,基本不等式)
题目链接:http://poj.org/problem?id=1183 这道题关键在于数学式子的推导,由题目有1/a=(1/b+1/c)/(1-1/(b*c))---------->a=(b*c ...
- bash shell parameter expansion
1 ${parameter%word}和${parameter%%word} ${parameter%word},word是一个模式,从parameter这个参数的末尾往前开始匹配.单个%进行最短匹配 ...
- Safair css hack
一下方式不会影响chrome浏览器样式 _::-webkit-full-page-media, _:future, :root .class{ /*此处放css样式*/ }
- php与html 表单的结合
PHP $_POST <!DOCTYPE html> <html> <body> <form method="post" action=& ...
- nodejs api 中文文档
文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格 ...