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 ...
随机推荐
- iOS提交应用至App Store流程及真机调试 一,证书、配置文件
前言:你要有苹果开发人员账号,我用的是个人账号.其次xcode为xcode 7,因为xcode 7须要 os x 系统 10.11 或更高的版本号, 所以os x 系统也须要 10.11 或更高的版本 ...
- HashMap源代码学习笔记
HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快的查询速度主要是由于它是通过计算散列码来决定存储的位置. HashMap中主要是通过key的hashCode来计算hash值的 ...
- Linux安装Axis C构建WebService服务
在安装Axis C++之前有两个组件是必须安装的,分别是Apache HTTP Server以及用于处理XML的程序Xerces:为了编译Axis以及Apache HTTPD,你的Linux机器还应该 ...
- Apache Qpid Broker云
一. 什么是Broker云 Apathe Qpid 支持Broker Federation ,也就是Broker联盟或者叫做Broker云.Broker Federation可以通过配置消息路 ...
- HBase运维基础--元数据逆向修复原理
背景 鉴于上次一篇文章——“云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据”的读者反馈,对HBase的逆向工程比较感兴趣,并咨询如何使用相应工具进行运维等等.总的来说,就是想更深层 ...
- Delphi如何实现多国语言
Delphi里的多语言处理方法都一样, 都是通过资源DLL的形式进行加载处理. Delphi在加载form数据的时候会判断当前的系统语言,然后根据语言加载不同的资源dll, 来实现多国语言的功能. 下 ...
- VC实现趋势图绘制
本文参考pudn上一个完整工程,在pudn搜索“50815867CurveDrawing”即可找到源代码. 上图是使用VS2010重写了该软件后的效果图,下面再贴出关键代码: // Plot.cp ...
- locate和grep命令
这任然是一篇读书笔记,以下内容来源<linux命令速查手册>这本书. 1.locate命令 用文件名或者文件名的部分来搜索文件在系统中的位置.locate不搜索具体目录,而是搜索一个数据库 ...
- mysql 中varchar(50)最多能存多少个汉字
首先要确定mysql版本4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能存16个(每个汉字3字节) 5.0版本以上,varchar(50),指的是50字符,无论存放 ...
- 学习js所必须要知道的一些
1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4. ...