小編最近在工作中使用springboot開發項目時候,遇到配置文件加載問題,一直不是很清楚idea中放置的位置和真正jar包中的位置,順便記錄下。
SpringBoot官網介紹 24.3Application Property Files介紹
默認情況下,我們可以將application.properties或者application.yaml(為了方便演示,本文以下均以application.properties介紹)放置在如下四處:
1、第一種,根據官網介紹將application.properties放置在當前目錄下的/config子目錄下
1.1、idea中,為了我們本地方便開發測試,我們在此處創建一個config目錄,然后把application.properties放進去,項目正常運行。
但是我們真正交付項目的時候,要把其打成jar包,我們找到項目所在路徑,使用maven工具,將其打成jar包,會生成在target包下。
jar包會自動生成在target目錄下。
我們將生成的jar包,復制出來,到另外文件夾進行運行,比如,我現在該jar包復制到test目錄下,但是這個時候是起不來,因為沒有配置文件,雖然我們在idea里面是有config目錄的,但是它並不沒有被打包進去。我們要把config目錄也復制過來,跟該jar包放在同一個目錄下。
在此處,我們可以使用java -jar demo-0.01-SNAPSHOT來運行項目。
正常運行。
1.2、第二種,根據官網介紹將application.properties放置在當前目錄下。在idea中,我們就是這樣的放置,就是把外面config目錄去掉,直接application.properties放置在項目下。
當我們將其打成jar包時,application.properties同樣不會被打包進jar包中。需要另外復制出來和jar包放在才能正常運行。
推薦以上兩種方式來放置配置文件,如果不寫開發,測試,和生產好幾套環境配置文件的話,就可以直接打開配置文件,改成自己需要的配置即可。
以下兩種方式是將該配置文件打包在jar包里面了,即便只改一個端口號,開發人員先改配置文件,再打包,再運行。此處也記錄下,並解開jar包,看下該配置文件被打包后,放置的位置。
1.3、classpath下的config目錄下,首先在idea中的位置,是放置在resource目錄下,等一會打包的時候,它就會被放置的classpath下。
打包后,如下圖,jar包再target里面,我們尋找下application.properties文件。為了方便演示,我們將target目錄下的demo-0.0.1-SNAPSHOT.jar放到一個新目錄給它解壓開,找下該配置文件,我放置到了一個test目錄下。
解壓后:如下圖,我們進入目錄
發現config目錄被放置在classes目錄下。然后這也就讓我們明白了,什么是classpath?classpath的路徑到底指的是哪里,在idea中我們就把它放置在resource目錄,該目錄就是表示classpath。而被打成jar包后classes目錄就是所謂的classpath。
1.4、第四種,同理,只是將單個application.properties文件直接放置在idea的resource目錄下,maven打包后,該配置文件的位置是在jar包里的classes目錄下。
所有的yaml文件,同理。