SpringBoot的配置文件加載順序以及如何獲取jar包里的資源路徑


一、讀取配置文件的四種方式

這四種配置文件放置方式的讀取優先級依次遞減,具體可以查看官方文檔

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
enter description here

 

打包后獲得的示例截圖:
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還需要學習一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM