如何在Spring Boot使用application.properties配置文件?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
龍安網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),龍安網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為龍安近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的龍安做網(wǎng)站的公司定做!
首先,當(dāng)我們創(chuàng)建一個(gè) Spring Boot 工程時(shí),默認(rèn) resources 目錄下就有一個(gè) application.properties 文件,可以在 application.properties 文件中進(jìn)行項(xiàng)目配置,但是這個(gè)文件并非唯一的配置文件,在 Spring Boot 中,一共有 4 個(gè)地方可以存放 application.properties 文件。
當(dāng)前項(xiàng)目根目錄下的 config 目錄下
當(dāng)前項(xiàng)目的根目錄下
resources 目錄下的 config 目錄下
resources 目錄下
按如上順序,四個(gè)配置文件的優(yōu)先級(jí)依次降低。如下:
這四個(gè)位置是默認(rèn)位置,即 Spring Boot 啟動(dòng),默認(rèn)會(huì)從這四個(gè)位置按順序去查找相關(guān)屬性并加載。但是,這也不是絕對(duì)的,我們也可以在項(xiàng)目啟動(dòng)時(shí)自定義配置文件位置。
例如,現(xiàn)在在 resources 目錄下創(chuàng)建一個(gè) javaboy 目錄,目錄中存放一個(gè) application.properties 文件,那么正常情況下,當(dāng)我們啟動(dòng) Spring Boot 項(xiàng)目時(shí),這個(gè)配置文件是不會(huì)被自動(dòng)加載的。我們可以通過(guò) spring.config.location 屬性來(lái)手動(dòng)的指定配置文件位置,指定完成后,系統(tǒng)就會(huì)自動(dòng)去指定目錄下查找 application.properties 文件。
此時(shí)啟動(dòng)項(xiàng)目,就會(huì)發(fā)現(xiàn),項(xiàng)目以 classpath:/javaboy/application.propertie 配置文件啟動(dòng)。
這是在開(kāi)發(fā)工具中配置了啟動(dòng)位置,如果項(xiàng)目已經(jīng)打包成 jar ,在啟動(dòng)命令中加入位置參數(shù)即可:
java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/javaboy/
文件名問(wèn)題
對(duì)于 application.properties 而言,它不一定非要叫 application ,但是項(xiàng)目默認(rèn)是去加載名為 application 的配置文件,如果我們的配置文件不叫 application ,也是可以的,但是,需要明確指定配置文件的文件名。
方式和指定路徑一致,只不過(guò)此時(shí)的 key 是 spring.config.name 。
首先我們?cè)?resources 目錄下創(chuàng)建一個(gè) app.properties 文件,然后在 IDEA 中指定配置文件的文件名:
指定完配置文件名之后,再次啟動(dòng)項(xiàng)目,此時(shí)系統(tǒng)會(huì)自動(dòng)去默認(rèn)的四個(gè)位置下面分別查找名為 app.properties 的配置文件。當(dāng)然,允許自定義文件名的配置文件不放在四個(gè)默認(rèn)位置,而是放在自定義目錄下,此時(shí)就需要明確指定 spring.config.location 。
配置文件位置和文件名稱(chēng)可以同時(shí)自定義。
普通的屬性注入
由于 Spring Boot 源自 Spring ,所以 Spring 中存在的屬性注入,在 Spring Boot 中一樣也存在。由于 Spring Boot 中,默認(rèn)會(huì)自動(dòng)加載 application.properties 文件,所以簡(jiǎn)單的屬性注入可以直接在這個(gè)配置文件中寫(xiě)。
例如,現(xiàn)在定義一個(gè) Book 類(lèi):
public class Book { private Long id; private String name; private String author; //省略 getter/setter }
然后,在 application.properties 文件中定義屬性:
book.name=三國(guó)演義 book.author=羅貫中 book.id=1
按照傳統(tǒng)的方式(Spring中的方式),可以直接通過(guò) @Value 注解將這些屬性注入到 Book 對(duì)象中:
@Component public class Book { @Value("${book.id}") private Long id; @Value("${book.name}") private String name; @Value("${book.author}") private String author; //省略getter/setter }
注意
Book 對(duì)象本身也要交給 Spring 容器去管理,如果 Book 沒(méi)有交給 Spring 容器,那么 Book 中的屬性也無(wú)法從 Spring 容器中獲取到值。
配置完成后,在 Controller 或者單元測(cè)試中注入 Book 對(duì)象,啟動(dòng)項(xiàng)目,就可以看到屬性已經(jīng)注入到對(duì)象中了。
一般來(lái)說(shuō),我們?cè)?application.properties 文件中主要存放系統(tǒng)配置,這種自定義配置不建議放在該文件中,可以自定義 properties 文件來(lái)存在自定義配置。
例如在 resources 目錄下,自定義 book.properties 文件,內(nèi)容如下:
book.name=三國(guó)演義 book.author=羅貫中 book.id=1
此時(shí),項(xiàng)目啟動(dòng)并不會(huì)自動(dòng)的加載該配置文件,如果是在 XML 配置中,可以通過(guò)如下方式引用該 properties 文件:
如果是在 Java 配置中,可以通過(guò) @PropertySource 來(lái)引入配置:
@Component @PropertySource("classpath:book.properties") public class Book { @Value("${book.id}") private Long id; @Value("${book.name}") private String name; @Value("${book.author}") private String author; //getter/setter }
這樣,當(dāng)項(xiàng)目啟動(dòng)時(shí),就會(huì)自動(dòng)加載 book.properties 文件。
這只是 Spring 中屬性注入的一個(gè)簡(jiǎn)單用法,和 Spring Boot 沒(méi)有任何關(guān)系。
類(lèi)型安全的屬性注入
Spring Boot 引入了類(lèi)型安全的屬性注入,如果采用 Spring 中的配置方式,當(dāng)配置的屬性非常多的時(shí)候,工作量就很大了,而且容易出錯(cuò)。
使用類(lèi)型安全的屬性注入,可以有效的解決這個(gè)問(wèn)題。
@Component @PropertySource("classpath:book.properties") @ConfigurationProperties(prefix = "book") public class Book { private Long id; private String name; private String author; //省略getter/setter }
springboot一種全新的編程規(guī)范,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程,SpringBoot也是一個(gè)服務(wù)于框架的框架,服務(wù)范圍是簡(jiǎn)化配置文件。
關(guān)于如何在Spring Boot使用application.properties配置文件問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。