將Spring Boot應用部署到Azure應用服務中的幾種方法

傳統(tǒng)的Java Web應用通常編譯為war包议泵,以Servlet的形式放在Tomcat倘屹、Jetty等Web容器中運行蓖宦。Spring Boot通過內(nèi)嵌Tomcat宵呛,將應用編譯成jar包的形式,可以通過java -jar filename.jar直接運行蚁阳。
Azure是微軟的公有云服務铃绒,在Azure上部署Web應用主要有以下幾種方式:

  • 應用服務(App Service),PaaS服務螺捐,全托管的環(huán)境颠悬,開發(fā)者只需要向FTP服務器或git倉庫推送代碼即可完成部署矮燎;
  • 云服務(Cloud Service),可以結(jié)合Web實例(通過 IIS自動部署和托管應用)和輔助實例(不使用IIS赔癌,獨立運行應用)構(gòu)建應用诞外,相對于應用服務更加靈活,可以自己登錄到實例上進行控制灾票;
  • 虛擬機(VM)峡谊,開通虛擬機后,自己在操作系統(tǒng)上安裝JDK刊苍、Tomcat等既们,并將war包或jar包放到上面運行;
  • 容器(Docker)正什,開發(fā)者將應用打包為docker鏡像啥纸,放到虛擬機上運行,并且可以進一步拓展為微服務架構(gòu)婴氮,通過Service Fabric調(diào)度和管理斯棒。

在這幾種方式中,最方便的當屬應用服務(App Service)主经。本文整理了官方文檔中幾種將Spring Boot應用部署到應用服務的具體方法荣暮。

1. 通過IDE插件一鍵發(fā)布

這是最簡單的方法,Azure提供了Eclipse和IntelliJ IDEA的插件(通過Visual Studio應該也是可以的罩驻,沒有確認):

上面兩篇文章中的示例工程是基于JSP頁面的渠驼,對于Spring Boot工程,過程也是一樣的鉴腻。
關于IntelliJ IDEA插件的安裝與登錄國內(nèi)版賬號:

2. 手動創(chuàng)建應用服務,在本地編譯Jar包百揭,推送代碼

這種方法的原理與第一種完全一樣爽哎,插件相當于將整個過程自動化了。具體操作步驟詳見這篇發(fā)表在MSDN博客上的文章:Deploy Java 8 Spring Boot API to Azure App Service – Cloud Solution Architect
其中創(chuàng)建應用服務可以如文中所介紹通過Azure Cloud Shell器一,也可以通過在本地運行Azure CLI课锌,或者登錄到portal,在圖形界面中操作祈秕。
對于推送代碼渺贤,文章中介紹的是git方式,插件中用的是FTP请毛。

3. 通過Azure App Service的maven插件

這種方法不需要IDE志鞍,可以在命令行完成,并且通過修改pom.xml文件和Application類方仿,將Spring Boot應用編譯成了war包固棚。
詳見:使用 Maven 和 Azure 將 Spring Boot 應用部署到云中 | Azure Docs统翩,英文原版:
Deploy a Spring Boot app to the cloud with Maven and Azure | Microsoft Docs

4. 使用同樣的maven插件,但以docker形式打包和發(fā)布

詳見:How to use the Maven Plugin for Azure Web Apps to deploy a Spring Boot app in Azure Container Registry to Azure App Service | Microsoft Docs
這種方法與上一種的不同之處首先在于此洲,本地編譯出來的不再是war包厂汗,也不是jar包,而是docker鏡像呜师。上一種使用的示例工程是spring-guides/gs-spring-boot娶桦,這一種是spring-guides/gs-spring-boot-docker
并且接下來先將鏡像發(fā)布到Azure Container Registry汁汗,然后再部署到App Service中衷畦,對應的pom.xml文件中,在maven插件的配置中少了<deploymentType>碰酝,多了<containerSettings>霎匈,對比如下:

  • war包形式:
    <plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-webapp-maven-plugin</artifactId>
    <!-- Check latest version on Maven Central -->
    <version>1.1.0</version>
    <configuration>
        <resourceGroup>maven-projects</resourceGroup>
        <appName>${project.artifactId}-${maven.build.timestamp}</appName>
        <region>westus</region>
        <javaVersion>1.8</javaVersion>
        <deploymentType>war</deploymentType>
    </configuration>
    </plugin>
    
  • docker形式:
    <plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-webapp-maven-plugin</artifactId>
    <version>0.1.3</version>
    <configuration>
        <authentication>
            <serverId>azure-auth</serverId>
        </authentication>
        <resourceGroup>wingtiptoysresources</resourceGroup>
        <appName>maven-linux-app-${maven.build.timestamp}</appName>
        <region>westus</region>
        <containerSettings>
            <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
            <registryUrl>https://${docker.image.prefix}</registryUrl>
            <serverId>${azure.containerRegistry}</serverId>
        </containerSettings>
        <appSettings>
            <property>
                <name>PORT</name>
                <value>8080</value>
            </property>
        </appSettings>
    </configuration>
    </plugin>
    

因為使用了同樣的maven插件,兩種方法最終部署應用的命令是一樣的:mvn azure-webapp:deploy送爸。
另外铛嘱,國內(nèi)版的Azure應用服務暫時還不支持容器應用,所以這種方法不適用袭厂。對比國內(nèi)版與國際版的應用服務:Azure應用服務 - Azure云計算 vs Azure 應用服務 - 應用托管 | Microsoft Azure墨吓。

5. 使用IntelliJ的插件發(fā)布docker

最后要介紹的方法與上一種一樣,在本地編譯的是docker項目纹磺,并且借助了在第一種方法中介紹過的IDE插件帖烘,但最終并沒有發(fā)布到應用服務,而是發(fā)布到了Docker主機上橄杨。詳見:使用用于 IntelliJ 的 Azure 工具包將 Spring Boot 應用作為 Docker 容器發(fā)布 | Azure Docs

補充閱讀

持續(xù)集成

MySQL數(shù)據(jù)庫

API應用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末式矫,一起剝皮案震驚了整個濱河市乡摹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌采转,老刑警劉巖聪廉,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異故慈,居然都是意外死亡板熊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門察绷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來干签,“玉大人,你說我怎么就攤上這事拆撼⊥惭希” “怎么了丹泉?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鸭蛙。 經(jīng)常有香客問我摹恨,道長,這世上最難降的妖魔是什么娶视? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任晒哄,我火速辦了婚禮,結(jié)果婚禮上肪获,老公的妹妹穿的比我還像新娘寝凌。我一直安慰自己,他們只是感情好孝赫,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布较木。 她就那樣靜靜地躺著,像睡著了一般青柄。 火紅的嫁衣襯著肌膚如雪伐债。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天致开,我揣著相機與錄音峰锁,去河邊找鬼。 笑死双戳,一個胖子當著我的面吹牛虹蒋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播飒货,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼魄衅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了塘辅?” 一聲冷哼從身側(cè)響起晃虫,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莫辨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毅访,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡沮榜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了喻粹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蟆融。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖守呜,靈堂內(nèi)的尸體忽然破棺而出型酥,到底是詐尸還是另有隱情山憨,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布弥喉,位于F島的核電站郁竟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏由境。R本人自食惡果不足惜棚亩,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虏杰。 院中可真熱鬧讥蟆,春花似錦、人聲如沸纺阔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笛钝。三九已至质况,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間婆翔,已是汗流浹背拯杠。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留啃奴,地道東北人潭陪。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像最蕾,于是被迫代替她去往敵國和親依溯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

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