官术网_书友最值得收藏!

1.2.3 Spring Boot配置體系

通過(guò)前面的分析,我們可以看到在開(kāi)發(fā)Web應(yīng)用程序時(shí),使用Spring Boot比Spring WebMVC更為簡(jiǎn)單高效。你可能已經(jīng)注意到了,以往在使用Spring WebMVC時(shí)需要指定的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)、Web服務(wù)端點(diǎn)等一系列配置信息都不見(jiàn)了。我們只需要在Maven中添加一項(xiàng)spring-boot-starter-web依賴(lài)并實(shí)現(xiàn)一個(gè)Controller,就可以提供微服務(wù)架構(gòu)中所推崇的RESTful風(fēng)格的接口。這需要引入Spring Boot中最具創(chuàng)新性的一項(xiàng)功能,即自動(dòng)配置機(jī)制。事實(shí)上,如果沒(méi)有特殊的配置需求,開(kāi)發(fā)人員完全可以基于Spring Boot內(nèi)置的配置體系完成諸如數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)等功能的相關(guān)配置信息的自動(dòng)集成。

在Spring Boot中,對(duì)配置信息的管理采用約定優(yōu)于配置的設(shè)計(jì)理念。在這一理念下,開(kāi)發(fā)人員所需要設(shè)置的配置信息數(shù)量比起使用傳統(tǒng)Spring框架將大大減少。那么,Spring Boot是如何組織和管理這些配置信息的呢?

為了達(dá)到集中化管理的目的,Spring Boot對(duì)配置文件的命名也做了一定的約定,分別使用label和profile來(lái)指定配置信息的版本以及運(yùn)行環(huán)境。其中l(wèi)abel表示配置版本控制信息,而profile則用來(lái)指定該配置文件所對(duì)應(yīng)的環(huán)境。在Spring Boot中,配置文件同時(shí)支持.properties和.yml兩種文件格式,結(jié)合label和profile的概念,如下所示的配置文件命名都是常見(jiàn)和合法的:

/{application}.yml

/{application}-{profile}.yml

/{label}/{application}-{profile}.yml

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

Yaml這種標(biāo)記語(yǔ)言的語(yǔ)法和其他高級(jí)語(yǔ)言類(lèi)似,并且可以非常直觀(guān)地表達(dá)各種列表、清單、標(biāo)量等數(shù)據(jù)形態(tài),特別適合用來(lái)表達(dá)或編輯數(shù)據(jù)結(jié)構(gòu)和各種配置文件。例如,我們可以指定如代碼清單1-5所示的數(shù)據(jù)源配置,這里使用了.yml文件。

代碼清單1-5 基于.yml文件的數(shù)據(jù)源配置示例

spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/user
        username: root
        password: root

如果采用.properties配置文件,那么上述配置信息將表現(xiàn)為如代碼清單1-6所示的形式。

代碼清單1-6 基于.properties文件的數(shù)據(jù)源配置示例

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/user
spring.datasource.username=root
spring.datasource.password=root

顯然,類(lèi)似這樣的數(shù)據(jù)源通常會(huì)根據(jù)環(huán)境的不同而存在很多套配置。通常,推薦的做法是為每個(gè)不同的環(huán)境提供一個(gè)獨(dú)立的配置文件。例如我們可以分別針對(duì)prod、test、uat等環(huán)境提供對(duì)應(yīng)的配置文件,如下所示:

application-prod.properties

application-uat.properties

application-test.properties

application.properties

注意這里有一個(gè)沒(méi)有添加任何環(huán)境后綴的application.properties配置文件。在Spring Boot中,這個(gè)application.properties就是主配置文件,是所有配置信息管理的入口。Spring Boot在獲取配置信息時(shí),會(huì)先從這個(gè)主配置文件中讀取相應(yīng)的配置。因此,我們可以把那些適用于所有環(huán)境的全局配置信息放在application.properties中。

另外,在Spring Boot中,我們可以在主配置文件中使用如代碼清單1-7所示的配置方式來(lái)激活當(dāng)前所使用的Profile。

代碼清單1-7 激活當(dāng)前所使用的Profile配置示例

spring.profiles.active = prod

上述配置項(xiàng)意味著系統(tǒng)在讀取完application.properties中的全局配置信息之后會(huì)繼續(xù)讀取application-prod.yml配置文件中的配置內(nèi)容。

如果我們不希望在全局配置文件中指定所需要激活的Profile,而是想把這個(gè)過(guò)程延遲到運(yùn)行這個(gè)服務(wù)時(shí),那么可以直接在java -jar命令中添加--spring.profiles.active參數(shù),如代碼清單1-8所示。

代碼清單1-8 通過(guò)java -jar命令激活Profile代碼示例

java -jar userservice-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

這種實(shí)現(xiàn)方案在通過(guò)腳本進(jìn)行自動(dòng)化打包和部署的場(chǎng)景下非常有用。

接下來(lái),我們給出一些常見(jiàn)開(kāi)發(fā)場(chǎng)景的配置示例。對(duì)于一個(gè)Web應(yīng)用程序而言,最常見(jiàn)的配置可能就是指定服務(wù)暴露的端口地址,如代碼清單1-9所示。

代碼清單1-9 服務(wù)暴露的端口地址配置示例

server:
    port: 8080

同時(shí),數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)也是Web應(yīng)用程序的基本功能。因此,關(guān)于數(shù)據(jù)源的設(shè)置也是一種常見(jiàn)的配置場(chǎng)景,我們已經(jīng)在前面給出了一個(gè)基本的示例。這里再以JPA為例,給出如代碼清單1-10所示的一種配置方案。

代碼清單1-10 數(shù)據(jù)源配置示例

spring:
    jpa:
        hibernate:
            ddl-auto: create
        show-sql: true

顯然,這里使用了Hibernate作為JPA規(guī)范的實(shí)現(xiàn)框架,并設(shè)置了show-sql等相關(guān)屬性。

最后,開(kāi)發(fā)人員一般需要對(duì)日志級(jí)別和對(duì)象進(jìn)行設(shè)置,代碼清單1-11所示的就是一個(gè)典型的配置示例。

代碼清單1-11 日志配置示例

logging.level.root=WARN
logging.level.com.springboot.user=INFO

我們?cè)O(shè)置了系統(tǒng)的全局日志級(jí)別為WARN,而針對(duì)自定義的com.springboot.user包下的日志,則將其級(jí)別調(diào)整到INFO。

主站蜘蛛池模板: 长子县| 沽源县| 罗城| 谢通门县| 揭东县| 米易县| 滦平县| 芒康县| 马龙县| 武清区| 弥渡县| 罗江县| 兖州市| 威信县| 瓮安县| 小金县| 遂宁市| 徐州市| 陈巴尔虎旗| 青海省| 安岳县| 宜章县| 巢湖市| 玉龙| 开封县| 溧阳市| 廉江市| 承德县| 咸宁市| 漾濞| 镇赉县| 剑阁县| 蓬莱市| 梁平县| 通榆县| 济阳县| 伊吾县| 双鸭山市| 当雄县| 台北市| 沙湾县|