一、读取配置文件的四种方式

这四种配置文件放置方式的读取优先级依次递减,具体可以查看官方文档

1.1jar包同级目录下的config文件夹里的配置文件

其实我以前就见过这种方式了,只是不知道怎么做的,这样便于修改服务器上的配置文件。
可以使用maven-source-plugin插件,然后运行命令mvn clean package将配置文件提取到项目外指定文件夹下。

  1. <plugin> 

  2. <groupId>org.apache.maven.plugins</groupId> 

  3. <artifactId>maven-resources-plugin</artifactId> 

  4. <version>${maven-resources-plugin.version}</version> 

  5. <executions> 

  6. <execution> 

  7. <id>copy-resources</id> 

  8. <phase>package</phase> 

  9. <goals> 

  10. <goal>copy-resources</goal> 

  11. </goals> 

  12. <configuration> 

  13. <outputDirectory>${basedir}/target/config/</outputDirectory> 

  14. <resources> 

  15. <resource> 

  16. <directory>src/main/resources</directory> 

  17. <includes> 

  18. <include>**/*.properties</include> 

  19. </includes> 

  20. </resource> 

  21. </resources> 

  22. </configuration> 

  23. </execution> 

  24. </executions> 

  25. </plugin> 

  26. <plugin> 

  27. <groupId>org.apache.maven.plugins</groupId> 

  28. <artifactId>maven-jar-plugin</artifactId> 

  29. <version>${maven-jar-plugin.version}</version> 

  30. <configuration> 

  31. <archive> 

  32. <manifest> 

  33. <addClasspath>true</addClasspath> 

  34. <classpathPrefix>./lib/</classpathPrefix> 

  35. <mainClass>${main-class}</mainClass> 

  36. </manifest> 

  37. </archive> 

  38. <excludes> 

  39. <exclude>**/*.properties</exclude> 

  40. </excludes> 

  41. </configuration> 

  42. </plugin> 

以上配置就可以实现将src/main/resources目录下的所有后缀名为properties的文件复制到config文件夹下,同时打包时排除properties文件。
注意:需要将新建项目时自带的spring-boot-maven-plugin插件去掉,否则不能生效。
去掉如下代码:

  1. <plugin> 

  2. <groupId>org.springframework.boot</groupId> 

  3. <artifactId>spring-boot-maven-plugin</artifactId> 

  4. </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目录

  1. <plugin> 

  2. <groupId>org.apache.maven.plugins</groupId> 

  3. <artifactId>maven-dependency-plugin</artifactId> 

  4. <version>${maven-dependency-plugin.version}</version> 

  5. <executions> 

  6. <execution> 

  7. <id>copy-dependencies</id> 

  8. <phase>package</phase> 

  9. <goals> 

  10. <goal>copy-dependencies</goal> 

  11. </goals> 

  12. <configuration> 

  13. <outputDirectory>${project.build.directory}/lib/</outputDirectory> 

  14. <includeScope>compile</includeScope> 

  15. </configuration> 

  16. </execution> 

  17. </executions> 

  18. </plugin> 

2.2将依赖添加到classpath

enter description here

打包后获得的示例截图:

三、获取jar包里的资源路径

其实这是个伪命题,因为jar自己就是个文件,如果用代码获取里面a.jar里面的b.jks文件,获得路径就变成了a.jar!/b.jks了。

jar中资源有其专门的URL形式: jar:!/{entry} 。所以,如果jar包中的类源代码用File f=new File(相对路径);的形式,是不可能定位到文件资源的,启动jar包时会报出FileNotFoundException。

所以只有两个选择:

  1. 打包时将文件放在jar包外,然后通过file:/path/to/b.jks这种形式来获取。
  2. 通过Class类的getResourceAsStream()方法来获取 ,不过返回的是InputStream并不是路径

可以参考这篇博客:https://blog.csdn.net/li2327234939/article/details/79565772

四、总结

maven插件太多了,maven-assembly-plugin还需要学习一下。

SpringBoot的配置文件加载顺序以及如何获取jar包里的资源路径的更多相关文章

  1. SpringBoot的配置文件加载顺序和使用方式

    1.bootstrap.properties bootstrap.properties 配置文件是由"根"上下文优先加载,程序启动之初就感知 如:Spring Cloud Conf ...

  2. struts几个配置文件加载顺序_2015.01.04

    struts几个配置文件加载顺序: 01:struts-default.xml 02:struts-plugin.xml 03:struts.xml 04:struts.properties 05:w ...

  3. bash 的配置文件加载顺序

    bash配置文件的加载顺序和登陆方式有关,下面先介绍下登陆方式. 1 登陆方式有2种 登陆式SHELL: su - oracle    su -l oracle 正常从终端登陆 非登录式SHELL: ...

  4. struts2配置文件加载顺序

    struts2配置文件加载顺序: struts-default.xml/ struts-plugin.xml/ struts.xml/ struts.properties/ web.xml

  5. 解决maven无法加载本地lib/下的jar包问题(程序包XXX不存在)

    这次一个项目用到maven编译,我在本地开发的时候jar包都是放在WEB-INF/lib目录下,通过 BuildPath将jar包导入,然后用MyEclipse中的:maven package命令打成 ...

  6. 【转】解决maven无法加载本地lib/下的jar包问题(程序包XXX不存在)

    原文链接:https://www.cnblogs.com/adeng/p/7096484.html 这次一个项目用到maven编译,我在本地开发的时候jar包都是放在WEB-INF/lib目录下,通过 ...

  7. @PropertySource加载文件的两种用法以及配置文件加载顺序

    第一种: 现在我把资源文件的路径放在application.properties里 config.path=/home/myservice/config.properties @PropertySou ...

  8. Spring Boot配置文件加载顺序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.通过spring.config.location改变配置文件的位置 二.外部配置加载顺序 1.使用命令行参数指定加 ...

  9. hadoop配置文件加载顺序(转)

    原文  http://www.cnblogs.com/wolfblogs/p/4147485.html 用了一段时间的hadoop,现在回来看看源码发现别有一番味道,温故而知新,还真是这样的 在使用h ...

随机推荐

  1. 【转载】C#扫盲之:==/Equals /ReferenceEquals 异同的总结,相等性你真的知道吗?

    1.前言 == Equals ReferenceEquals 三个相等性测试,是.NET提供给程序员使用的三个方法,他们之间有什么联系和区别,你真的仔细研究过?虽然之前也多多少少知道一点,但是有时候又 ...

  2. Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor

    Webservice WCF WebApi   注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下, ...

  3. 运营或生态链没做好,APP质量再高有个鸟用(下)

    上篇文章已经阐述了对于一款产品卖不卖作,事实上非常依赖于运营的打造和生态链的建立,这里能够解释为什么很多优秀的游戏产品功底非常好,但開始并不卖作,仅仅有碰到一家肯出力推的渠道游戏才迅速火了起来.这是不 ...

  4. Androidproject文件下assets目录与res目录的差别

    1. assets : 不会在R.java文件下生成对应的标记,assets目录能够自己创建目录,必须使用AssetsManager类进行訪问,存放到这里的资源在执行打包的时候都会打入程序安装包中, ...

  5. 面向接口的webservice发布方式

    import javax.jws.WebService; /**面向接口的webservice发布方式 */ @WebService public interface JobService { pub ...

  6. dubbo springCloud比较

    1.dubbo只是专注于服务之间的治理,配置中心.分布式跟踪等这些内容都需要自己集成 2.dubbo核心功能: a.远程通讯 b.集群容错 c.自动发现 Dubbo SpringCloud 服务注册中 ...

  7. mysql使用“.frm”文件恢复表结构

    mysql创建每张表后都会在“mysql安装目录/data/数据库名/”目录下创建一个“表名.frm”文件. 该.frm文件并不能直接打开,但是它可以帮助你恢复你的表结构~~ 具体操作如下: 我现在准 ...

  8. html使用代码大全

    <DIV style="FONT-SIZE: 9pt">1)贴图:<img src="图片地址">1)首行缩进2格:<p styl ...

  9. V-Play 文档翻译 Page

    V-Play 文档翻译 Page 翻译:qyvlik 应用的一个页面. VPlayApps 1.0 Inherits: MouseArea Inherited By: ListPage 属性 Item ...

  10. java 提高效率的做法

    可供程序利用的资源(内存.CPU时间.网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率.本文讨论的主要是如何提高代 ...