Spring Boot 筆記

新建 Spring Boot 項(xiàng)目

這個(gè)部分 Idea,Spring Boot 官網(wǎng)工具都能夠創(chuàng)建 Spring Boot 項(xiàng)目些侍,這里省略妄田。

Spring Boot 工程的 pom.xml

新建的 Spring Boot 工程項(xiàng)目中的 pom.xml 文件有父依賴。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>

這塊配置就是Spring Boot父級(jí)依賴灭返,有了這個(gè)景用,當(dāng)前的項(xiàng)目就是Spring Boot項(xiàng)目了涵叮,spring-boot-starter-parent是一個(gè)特殊的starter,它用來(lái)提供相關(guān)的Maven默認(rèn)依賴惭蹂,使用它之后,常用的包依賴可以省去version標(biāo)簽割粮。

繼續(xù)看 spring-boot-starter-parent 的 pom.xml 文件盾碗,可以看到它還有父依賴。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
</parent>

spring-boot-dependencies 的 pom.xml 文件中我們才看到了定義的一些第三方包的版本屬性信息舀瓢。

<properties>
    <!-- Dependency versions -->
    <activemq.version>5.14.5</activemq.version>
    <antlr2.version>2.7.7</antlr2.version>
    <appengine-sdk.version>1.9.59</appengine-sdk.version>
    <artemis.version>1.5.5</artemis.version>
    <aspectj.version>1.8.13</aspectj.version>
    <assertj.version>2.6.0</assertj.version>
    <atomikos.version>3.9.3</atomikos.version>
    ...
</properties>

這里只截取了一部分廷雅,完整的大家可以看一下 spring-boot-dependencies 的 pom.xml。

spring-boot-dependencies 中還定義了一些 starter。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>1.5.9.RELEASE</version>
    </dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <version>1.5.9.RELEASE</version>
</dependency>
...

這個(gè)就是我們?cè)?Spring Boot 項(xiàng)目中,添加了父依賴之后芳誓,添加 starter 和 一些第三方包的時(shí)候不用填寫 version 的秘密。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>

如果你不想使用 Spring Boot 指定的第三方包的版本芥玉,你可以在自己的項(xiàng)目中定義第三方依賴項(xiàng)的版本來(lái)覆蓋 Spring Boot 指定的版本。比如 spring-boot-dependencies 中指定了 logback 的版本為 1.1.11 备图。

<logback.version>1.1.11</logback.version>

現(xiàn)在我們想在自己的項(xiàng)目中使用 logback 的版本是 1.2.3 灿巧,可以在自己的項(xiàng)目 pom.xml 文件 properties 中重新指定一下 logback 的版本即可。

<properties>
    <logback.version>1.2.3</logback.version>
    ...
</properties>

當(dāng)然并不是每個(gè)人都愿意繼承 spring-boot-starter-parent 這個(gè)父依賴的揽涮。這個(gè)可能是因?yàn)樽约汗緯?huì)提供標(biāo)準(zhǔn)的 parent 父依賴(比如筆者公司就使用 inf-bom 來(lái)指定公司基礎(chǔ)組件的版本信息)抠藕。如果遇到這種情況,不能依賴 spring-boot-starter-parent 蒋困,但是又想使用 spring-boot-starter-parent 提供的依賴管理功能盾似,這樣就可以不用寫 version 了,這個(gè)時(shí)候可以通過(guò)使用 scope = import 依賴關(guān)系來(lái)保持依賴關(guān)系管理:

<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.9.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

使用這種方式來(lái)管理依賴關(guān)系時(shí)雪标,如果想使用自定義第三方版本時(shí)零院,不能使用前面提到的在自己的項(xiàng)目 pom.xml 文件 properties 中重新指定一下第三方 jar 包版本。要實(shí)現(xiàn)相同的結(jié)果汰聋,您需要在 spring-boot-dependencies 項(xiàng)之前的項(xiàng)目的 dependencyManagement 中添加一個(gè)配置门粪,例如,要升級(jí)到另一個(gè) logback 版本烹困,您可以將以下內(nèi)容添加到pom.xml 中。

<dependencyManagement>
    <dependencies>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.9.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Spring Boot 的配置文件

Spring Boot使用了一個(gè)全局的配置文件application.properties乾吻,放在src/main/resources目錄下或者類路徑的/config下髓梅。Sping Boot的全局配置文件的作用是對(duì)一些默認(rèn)配置的配置值進(jìn)行修改。

自定義屬性

com.elvis.name="懶癌正患者"
com.elvie.wish="希望世界和平"

然后直接在要使用的地方通過(guò)注解@Value(value=”${config.name}”)就可以綁定到你想要的屬性上面

@RestController
public class UserController {

    @Value("${com.elvis.name}")
    private  String name;
    @Value("${com.elvie.wish}")
    private  String wish;

    @GetMapping("hello")
    public ResultView hello() {
        return ResultView.builder().data(name + wish).build();
    }
}

此時(shí)在瀏覽器中訪問這個(gè)路徑就能看到響應(yīng)結(jié)果

{
  "code": 0,
  "message": "success",
  "data": "懶癌正患者希望世界和平"
}

但是當(dāng)自定義的配置屬性比較多绎签,使用這種方式來(lái)一個(gè)一個(gè)綁定到屬性上枯饿,是不是很麻煩

@Value("${com.elvis.name}")
private String name;
@Value("${com.elvie.wish}")
private String wish;

這個(gè)時(shí)候可以定義一個(gè)配置類,這里我定義為 ElvisConfig , 頂部需要使用注解 @ConfigurationProperties(prefix = "com.elvis")來(lái)指明使用哪個(gè)

@Data
@ConfigurationProperties(prefix = "com.elvis")
public class ElvisConfig {

    private String name;

    private String wish;

}

這里配置完還需要在 Spring Boot 入口類加上@EnableConfigurationProperties并指明要加載哪個(gè)bean诡必。

@SpringBootApplication
@EnableConfigurationProperties({ElvisConfig.class})
public class Aggregation {

    public static void main(String[] args) {
        SpringApplication.run(Aggregation.class, args);
    }
}
@RestController
public class UserController {

    @Autowired
    private ElvisConfig elvisConfig;

    @GetMapping("hello")
    public ResultView hello() {
        return ResultView.builder().data(elvisConfig.getName() + elvisConfig.getWish()).build();
    }
}

參數(shù)間引用

application.properties中的各個(gè)參數(shù)之間也可以直接引用來(lái)使用奢方,就像下面的設(shè)置:

com.elvis.name="懶癌正患者"
com.elvie.wish="希望世界和平"
com.elvis.says=${com.elvis.name}說(shuō)${com.elvie.wish}

使用自定義配置文件

有時(shí)候我們不希望把所有配置都放在application.properties里面搔扁,這時(shí)候我們可以另外定義一個(gè),這里我明取名為test.properties,路徑跟也放在src/main/resources下面蟋字。

test.properties 的內(nèi)容

com.elvis.name="懶癌正患者"
com.elvie.wish="希望世界和平"

我們新建一個(gè)bean類稿蹲,如下:

@Data
@Configuration
@ConfigurationProperties(prefix = "com.elvis") 
@PropertySource("classpath:test.properties")
public class ConfigTestBean {
    
    private String name;
    
    private String wish;
}

這里要注意哦,有一個(gè)問題鹊奖,如果你使用的是1.5以前的版本苛聘,那么可以通過(guò)locations指定properties文件的位置,這樣:

@ConfigurationProperties(prefix = "com.elvis",locations="classpath:test.properties")

但是1.5版本后就沒有這個(gè)屬性了忠聚,找了半天發(fā)現(xiàn)添加@Configuration@PropertySource(“classpath:test.properties”)后才可以讀取设哗。

配置文件的優(yōu)先級(jí)

application.propertiesapplication.yml文件可以放在以下四個(gè)位置:

  • 外置,在相對(duì)于應(yīng)用程序運(yùn)行目錄的/congfig子目錄里两蟀。
  • 外置网梢,在應(yīng)用程序運(yùn)行的目錄里
  • 內(nèi)置,在config包內(nèi)
  • 內(nèi)置赂毯,在Classpath根目錄

同樣澎粟,這個(gè)列表按照優(yōu)先級(jí)排序,也就是說(shuō)欢瞪,src/main/resources/config下application.properties覆蓋src/main/resources下application.properties中相同的屬性活烙,此外,如果你在相同優(yōu)先級(jí)位置同時(shí)有application.properties和application.yml遣鼓,那么application.properties里的屬性里面的屬性就會(huì)覆蓋application.yml啸盏。

Profile-多環(huán)境配置

當(dāng)應(yīng)用程序需要部署到不同運(yùn)行環(huán)境時(shí),一些配置細(xì)節(jié)通常會(huì)有所不同骑祟,最簡(jiǎn)單的比如日志回懦,生產(chǎn)日志會(huì)將日志級(jí)別設(shè)置為WARN或更高級(jí)別,并將日志寫入日志文件次企,而開發(fā)的時(shí)候需要日志級(jí)別為DEBUG怯晕,日志輸出到控制臺(tái)即可。
如果按照以前的做法缸棵,就是每次發(fā)布的時(shí)候替換掉配置文件舟茶,這樣太麻煩了,Spring Boot的Profile就給我們提供了解決方案堵第,命令帶上參數(shù)就搞定吧凉。

這里我們來(lái)模擬一下,只是簡(jiǎn)單的修改端口來(lái)測(cè)試

在Spring Boot中多環(huán)境配置文件名需要滿足application-{profile}.properties的格式踏志,其中{profile}對(duì)應(yīng)你的環(huán)境標(biāo)識(shí)阀捅,比如:

  • application-dev.properties:開發(fā)環(huán)境
  • application-prod.properties:生產(chǎn)環(huán)境

想要使用對(duì)應(yīng)的環(huán)境,只需要在application.properties中使用spring.profiles.active屬性來(lái)設(shè)置针余,值對(duì)應(yīng)上面提到的{profile}饲鄙,這里就是指dev凄诞、prod這2個(gè)。

當(dāng)然你也可以用命令行啟動(dòng)的時(shí)候帶上參數(shù):

java -jar xxx.jar --spring.profiles.active=dev

我給不同的環(huán)境添加不同的端口屬性server.port忍级,然后根據(jù)指定不同的spring.profiles.active來(lái)切換使用帆谍。各位可以自己試試。這里就不貼代碼了颤练。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末既忆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗦玖,更是在濱河造成了極大的恐慌患雇,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宇挫,死亡現(xiàn)場(chǎng)離奇詭異苛吱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)器瘪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門翠储,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人橡疼,你說(shuō)我怎么就攤上這事援所。” “怎么了欣除?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵住拭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我历帚,道長(zhǎng)滔岳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任挽牢,我火速辦了婚禮谱煤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禽拔。我一直安慰自己刘离,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布奏赘。 她就那樣靜靜地躺著寥闪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪磨淌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天凿渊,我揣著相機(jī)與錄音梁只,去河邊找鬼缚柳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛搪锣,可吹牛的內(nèi)容都是我干的秋忙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼构舟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼灰追!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起狗超,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弹澎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后努咐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苦蒿,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年渗稍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佩迟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡竿屹,死狀恐怖报强,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拱燃,我是刑警寧澤秉溉,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站扼雏,受9級(jí)特大地震影響坚嗜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诗充,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一苍蔬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝴蜓,春花似錦碟绑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至诵冒,卻和暖如春凯肋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汽馋。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工侮东, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留圈盔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓悄雅,卻偏偏與公主長(zhǎng)得像驱敲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宽闲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容