最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Maven管理SpringBoot Profile詳解

 更新時(shí)間:2017年10月31日 14:26:58   作者:chadLi  
這篇文章主要介紹了Maven管理SpringBoot Profile詳解,具有一定參考價(jià)值,需要的朋友可以了解下。

1. Spring Profile

Spring可使用Profile絕對(duì)程序在不同環(huán)境下執(zhí)行情況,包含配置、加載Bean、依賴等。

Spring的Profile一般項(xiàng)目包含:dev(開(kāi)發(fā)), test(單元測(cè)試), qa(集成測(cè)試), prod(生產(chǎn)環(huán)境)。由spring.profiles.active屬性絕定啟用的profile。

SpringBoot的配置文件默認(rèn)為 application.properties(或yaml,此外僅心properties配置為說(shuō)明)。不同Profile下的配置文件由application-{profile}.properties管理,同時(shí)獨(dú)立的 Profile配置文件會(huì)覆蓋默認(rèn)文件下的屬性。

2. Maven Profile

Maven同樣也有Profile設(shè)置,可在構(gòu)建過(guò)程中針對(duì)不同的Profile環(huán)境執(zhí)行不同的操作,包含配置、依賴、行為等。

Maven的Profile由 pom.xml 的<Profiles>標(biāo)簽管理。每個(gè)Profile中可設(shè)置:id(唯一標(biāo)識(shí)), properties(配置屬性), activation(自動(dòng)觸發(fā)的邏輯條件), dependencies(依賴)等。

此文章不對(duì)Spring和Maven的Profile作過(guò)多說(shuō)明,詳細(xì)情況請(qǐng)自行查閱。

3. Maven 管理 Spring Profile

由于構(gòu)建是基于Maven(或Gradle,此處僅以Maven說(shuō)明)。所以使用Maven管理Spring構(gòu)建時(shí)的Profile是非常方便的。

Maven管理Spring Profile分五步,以下詳細(xì)介紹。

3.1 去掉默認(rèn)的 Tomcat依賴

在SpringBoot MVC項(xiàng)目中,默認(rèn)以內(nèi)嵌Tomcat運(yùn)行,如果需要特殊的設(shè)置或者使用Undertow,需要去掉默認(rèn)的Tomcat依賴:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
</dependency>

如果你同時(shí)使用了 MyBatis,需要去掉tomcat-jdbc依賴:

<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-jdbc</artifactId>
    </exclusion>
  </exclusions>
</dependency>

3.2 Maven Profile設(shè)置

在項(xiàng)目(如果有模塊為具體模塊)的pom.xml下設(shè)置:

<!-- Maven控制Spring Profile -->
<profiles>
  <profile>
    <id>dev</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <profileActive>dev</profileActive>
    </properties>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
      </dependency>
      <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jdbc</artifactId>
      </dependency>
    </dependencies>
  </profile>
  <profile>
    <id>prod</id>
    <properties>
      <profileActive>prod</profileActive>
    </properties>
  </profile>
</profiles>

從上面的配置可以看出,Maven的Profile配置了兩個(gè):dev和prod,并且在dev中使用了內(nèi)嵌Tomcat,而 prod 中沒(méi)有,所以這兩個(gè)Profile打包的文件dev可以直接運(yùn)行(Plugin使用了SpringBoot Plugin),而prod并不能直接運(yùn)行(或部署在外部Tomcat下,并不推薦這樣,后面會(huì)說(shuō)明)。

properties中的profileActive是我們申明的屬性,此處對(duì)應(yīng)Spring的Profile值。

3.3 Maven資源過(guò)濾

SpringBoot的 Profile選擇需要在 application.properties中配置,如果定死在文件,那么每次打包都需要手動(dòng)修改,很麻煩,而且容易出錯(cuò)。

Maven的資源過(guò)濾功能可以實(shí)現(xiàn)在構(gòu)建時(shí)修改以“@xxx@”表示的屬性。資源過(guò)濾需要在pom.xml的<build>標(biāo)簽下配置 resources:

<!-- profile對(duì)資源的操作 -->
<resources>
  <resource>
    <directory>src/main/resources</directory>
    <excludes>
      <exclude>application*.properties</exclude>
    </excludes>
  </resource>
  <resource>
    <directory>src/main/resources</directory>
    <!-- 是否替換@xx@表示的maven properties屬性值 -->
    <filtering>true</filtering>
    <includes>
      <include>application.properties</include>
      <include>application-${profileActive}.properties</include>
    </includes>
  </resource>
</resources>

上面的第一個(gè)resource去掉了src/main/resources下的所有application.properties文件,“”是通配符,表示此處有任何內(nèi)容(沒(méi)有也可以)都匹配。

第二個(gè)resource添加了application.properties默認(rèn)配置文件和由profileActive屬性決定的相應(yīng)profile配置文件。并且filtering為true表示,會(huì)將文件內(nèi)容的“@xx@”替換為相應(yīng)的變量(如文件中的@profileActive@會(huì)替換為profileActive屬性值)。

3.4 Spring配置Profile

在application.properties默認(rèn)配置文件中配置:

spring.profiles.active = @profileActive@

@profileActive@表示該屬性值會(huì)在maven構(gòu)建時(shí)被替換掉。

3.5 構(gòu)建

構(gòu)建命令:

mvn clean package -Pdev

上面的命令會(huì)根據(jù)Maven Profile的 dev構(gòu)建環(huán)境包,如果需要prod包,則把-P的參數(shù)替換成prod即可。

為了方便我會(huì)在每個(gè)項(xiàng)目下生成一個(gè)build.sh文件,內(nèi)容如下:

#!/bin/bash
profileActive=prod
if [ -n "$1" ]; then
  profileActive=$1
fi
mvn clean package -Dmaven.test.skip=true -P$profileActive

該腳本接收一個(gè)參數(shù),即打包對(duì)應(yīng)的Profile。默認(rèn)情況下如果不帶參數(shù),會(huì)打包prod環(huán)境包。

需要注意的是,該命令跳過(guò)了測(cè)試。

4. 總結(jié)

完成了上面的五步,即可使項(xiàng)目根據(jù)你的構(gòu)建參數(shù)的不同,打包出不同環(huán)境下運(yùn)行的包。

第1步去掉了SpringBoot內(nèi)嵌的tomcat和tomcat-jdbc。使得我們可以決定在什么情況下使用何種容器運(yùn)行我們的項(xiàng)目。
第2步配置了Maven構(gòu)建Porfile,使得構(gòu)建可根據(jù)我們的指令分發(fā)不同的包。
第3步配置了Maven資源過(guò)濾,不僅使得不同Profile下的資源文件互不可見(jiàn),且替換了資源文件中以“@xx@”表示的屬性值。
第4步使Spring的Profile由Maven決策,這樣,我們就不用每次打包都修改Spring的Profile配置了。
第5步展示了如何執(zhí)行不同Profile下的構(gòu)建命令,并且使用了一個(gè)Shell腳本方便我們執(zhí)行構(gòu)建和跳過(guò)測(cè)試(多數(shù)時(shí)候我們?cè)跇?gòu)建項(xiàng)目時(shí)先測(cè)試,并不需要在構(gòu)建時(shí)測(cè)試,測(cè)試和構(gòu)建的解耦使得我們更專(zhuān)注。但同時(shí),如果你忘記了前置測(cè)試,也可能會(huì)引發(fā)未察覺(jué)的測(cè)試問(wèn)題)。

以上就是本文關(guān)于Maven管理SpringBoot Profile詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。歡迎參閱:maven學(xué)習(xí)-初窺門(mén)徑、使用maven運(yùn)行Java Main的三種方法解析等,有什么問(wèn)題可以留言,歡迎大家交流討論。

相關(guān)文章

  • Mybatis?Plus?新版lambda?表達(dá)式查詢異常的處理

    Mybatis?Plus?新版lambda?表達(dá)式查詢異常的處理

    這篇文章主要介紹了Mybatis?Plus?新版lambda?表達(dá)式查詢異常的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java實(shí)現(xiàn)文件夾上傳功能實(shí)例代碼(SpringBoot框架)

    java實(shí)現(xiàn)文件夾上傳功能實(shí)例代碼(SpringBoot框架)

    在web項(xiàng)目中上傳文件夾現(xiàn)在已經(jīng)成為了一個(gè)主流的需求,下面這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)文件夾上傳功能(springBoot框架)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • MyBatis-Plus實(shí)用篇超完整教程

    MyBatis-Plus實(shí)用篇超完整教程

    MyBatis-Plus是一個(gè)MyBatis的增強(qiáng)工具,提供了許多便捷的功能,簡(jiǎn)化了開(kāi)發(fā)流程,同時(shí),MyBatis-Plus提供了鏈?zhǔn)讲樵兣c修改、靜態(tài)工具類(lèi)、自定義SQL、IPage的泛型轉(zhuǎn)換、ActiveRecord等擴(kuò)展功能,以及分頁(yè)插件和MyBatisX插件等插件,進(jìn)一步提高了開(kāi)發(fā)效率,感興趣的朋友一起看看吧
    2025-02-02
  • java request.getHeader(

    java request.getHeader("user-agent")獲取瀏覽器信息的方法

    這篇文章主要介紹了java request.getHeader("user-agent")獲取瀏覽器信息的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java實(shí)現(xiàn)酒店客房管理系統(tǒng)

    Java實(shí)現(xiàn)酒店客房管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)酒店客房管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • java反射實(shí)現(xiàn)javabean轉(zhuǎn)json實(shí)例代碼

    java反射實(shí)現(xiàn)javabean轉(zhuǎn)json實(shí)例代碼

    基于java反射機(jī)制實(shí)現(xiàn)javabean轉(zhuǎn)json字符串實(shí)例,大家參考使用吧
    2013-12-12
  • SpringMVC數(shù)據(jù)輸出相關(guān)知識(shí)總結(jié)

    SpringMVC數(shù)據(jù)輸出相關(guān)知識(shí)總結(jié)

    今天帶大家學(xué)習(xí)SpringMVC的相關(guān)知識(shí),文中對(duì)SpringMVC數(shù)據(jù)輸出作了非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java?Date類(lèi)的使用方式(日期處理)

    Java?Date類(lèi)的使用方式(日期處理)

    本文介紹了Java中的Date類(lèi)和Calendar類(lèi)的使用,詳細(xì)講解了Date類(lèi)的構(gòu)造方法和常用方法,并通過(guò)一個(gè)實(shí)例演示了如何使用Date類(lèi)來(lái)比較兩個(gè)時(shí)間點(diǎn)之間的關(guān)系
    2024-11-11
  • Java string類(lèi)型轉(zhuǎn)換成map代碼實(shí)例

    Java string類(lèi)型轉(zhuǎn)換成map代碼實(shí)例

    這篇文章主要介紹了Java string類(lèi)型轉(zhuǎn)換成map代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java如何實(shí)現(xiàn)雙向鏈表功能

    Java如何實(shí)現(xiàn)雙向鏈表功能

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個(gè)結(jié)點(diǎn)開(kāi)始,都可以很方便地訪問(wèn)它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。一般我們都構(gòu)造雙向循環(huán)鏈表
    2021-11-11

最新評(píng)論

黑水县| 垦利县| 新营市| 婺源县| 平和县| 乌鲁木齐市| 鄢陵县| 滕州市| 临安市| 海城市| 肇庆市| 清远市| 灯塔市| 炉霍县| 杭锦旗| 江安县| 武夷山市| 安达市| 拜城县| 龙南县| 伽师县| 台前县| 西贡区| 临海市| 汕尾市| 布尔津县| 资阳市| 贺兰县| 凌海市| 利津县| 北碚区| 九龙城区| 三明市| 信阳市| 唐河县| 麻江县| 柳河县| 宜丰县| 阳谷县| 大悟县| 巩义市|