欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot多模塊打包部署Docker的項(xiàng)目實(shí)戰(zhàn)

 更新時(shí)間:2023年08月20日 11:54:48   作者:天使手兒  
本文通過(guò)介紹最常見(jiàn)的Maven管理的Spring Boot項(xiàng)目多模塊打包部署Docker來(lái)介紹一下項(xiàng)目部署過(guò)程中操作流程和幾個(gè)需要注意的點(diǎn),具有一定的參加價(jià)值,感興趣的可以了解一下

前言

我們好多程序員都只關(guān)注功能代碼的編寫(xiě),在一些運(yùn)維工作上則顯得略有不足。這篇文章通過(guò)介紹最常見(jiàn)的Maven管理的Spring Boot項(xiàng)目多模塊打包部署Docker來(lái)介紹一下項(xiàng)目部署過(guò)程中操作流程和幾個(gè)需要注意的點(diǎn)。文章假設(shè)讀者有前面提到的技術(shù)點(diǎn)的前置知識(shí),不過(guò)沒(méi)有也沒(méi)關(guān)系,所涉及到的點(diǎn)都比較簡(jiǎn)單。

Maven管理多模塊項(xiàng)目

在項(xiàng)目過(guò)大后都會(huì)對(duì)項(xiàng)目通過(guò)多模塊的方式進(jìn)行拆分,下面來(lái)說(shuō)一下拆分多模塊的操作步驟。

首先看一下現(xiàn)在的目錄結(jié)構(gòu)。注意現(xiàn)在的項(xiàng)目是使用gradle進(jìn)行構(gòu)建的,隨后我會(huì)把它轉(zhuǎn)為使用maven構(gòu)建。:

接下來(lái)我們使項(xiàng)目變成父子模塊的結(jié)構(gòu)。首先我們新建一個(gè)module,命名為demo-web。該模塊用來(lái)存放web相關(guān)功能的代碼:

現(xiàn)在的機(jī)構(gòu)變成了這樣:

接下來(lái)以類似的方式進(jìn)行整理,整理過(guò)后的項(xiàng)目結(jié)構(gòu)是下面這樣的。來(lái)介紹一下各個(gè)模塊的功能:common用于存放公共的方法,可以是各種工具類的集合。main模塊放spring boot的啟動(dòng)類和一些configure,比如我們將common模塊中的普通對(duì)象聲明為bean。service存放了我們的service層代碼。web模塊中主要是controller。

pom文件

接下來(lái)看各個(gè)模塊的pom文件是如何配置的,以及它們各自的作用。

這是父模塊的pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>demo</name>
    <description>demo</description>
    <modules>
        <module>demo-web</module>
        <module>demo-common</module>
        <module>demo-service</module>
        <module>demo-main</module>
    </modules>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

其中modules標(biāo)簽內(nèi)的內(nèi)容是我們的各個(gè)子模塊。由于這個(gè)demo項(xiàng)目是使用Spring Initializr自動(dòng)生成的,它給出的是parent是Spring Boot Starter,這一塊暫時(shí)先不要改動(dòng)。build標(biāo)簽里使用了spring boot的maven插件,這個(gè)插件會(huì)在我們使用maven打包時(shí)打包成一個(gè)jar包,一個(gè)jar包運(yùn)行也是spring boot的精髓所在。也就是說(shuō),使用spring boot maven plugin打好的jar包,只需要一個(gè)命令 java -jar yourjar.jar 就可以運(yùn)行了。

我們?cè)偈崂硪槐楦鱾€(gè)模塊之間的關(guān)系:common是各個(gè)模塊所依賴的工具模塊,它里邊的實(shí)現(xiàn)可以不依賴spring,因此不需要使用上面的打包工具,也不用依賴于父模塊來(lái)獲得父級(jí)依賴(主要是spring)。service模塊是服務(wù)層代碼所在的模塊,需要依賴父模塊以繼承spring的依賴。web模塊存放的是controller相關(guān)的實(shí)現(xiàn),當(dāng)然也需要依賴父模塊,由于需要使用服務(wù)層代碼,當(dāng)然也需要依賴service模塊。main模塊是spring boot啟動(dòng)類所在的模塊,前面提到的打成一個(gè)jar包實(shí)際上就是去jar里尋找這個(gè)啟動(dòng)類。再由啟動(dòng)類帶動(dòng)其余的service模塊、web模塊運(yùn)行。因此main塊還需要依賴service和web模塊。

除此之外,還需要注意的一個(gè)點(diǎn)是,由于我們讓service和web繼承了父模塊,因此也會(huì)繼承了父模塊的打包組件spring boot maven plugin,在打包時(shí)也會(huì)把這兩個(gè)模塊打成spring boot格式的jar包,而這種格式需要有一個(gè)主類作為入口(就是我們的spring boot啟動(dòng)類),但是我們這兩個(gè)都是服務(wù)模塊并沒(méi)有啊。因此還需要在打包的時(shí)候做一些調(diào)整,使用下面的 build 標(biāo)簽來(lái)跳過(guò)打可執(zhí)行jar包的步驟,讓這兩個(gè)模塊打出來(lái)的是普通的jar包。

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            	<configuration>
            		<skip>ture</skip>
            	</configuration>
            </plugin>
        </plugins>
    </build>

Docker部署

在部署之前確保你有docker環(huán)境,這里就不再贅述了。我們的想法是使用docker file制作一個(gè)鏡像,然后在鏡像中運(yùn)行我們的自己的多模塊項(xiàng)目。前邊提到,只需要將main模塊打好的jar包使用 java -jar 命令執(zhí)行一下就能啟動(dòng)了。因此把這個(gè)打好的jar包放到鏡像里就可以了。西面是docker file的編寫(xiě):

# 使用基礎(chǔ)的Java鏡像
FROM openjdk:latest
# 將構(gòu)建好的Spring Boot JAR文件復(fù)制到容器中
COPY demo-main/target/demo-main-0.0.1-SNAPSHOT.jar /usr/src/myapp/app.jar
# 設(shè)置工作目錄
WORKDIR /usr/src/myapp
# 暴露 Spring Boot 應(yīng)用程序的端口
EXPOSE 8080
# 運(yùn)行 Spring Boot 應(yīng)用程序
CMD ["java", "-jar", "app.jar"]

寫(xiě)完docker file后運(yùn)行下面命令來(lái)制作鏡像: sudo docker build -t demoApp . 不要忘記最后有個(gè) .

鏡像制作好后使用下面命令來(lái)后臺(tái)啟動(dòng)容器并將端口映射為8080: sudo docker -d demoApp -p 8080:8080 ?,F(xiàn)在就可以在瀏覽器中訪問(wèn)你部署好的項(xiàng)目了。

到此這篇關(guān)于SpringBoot多模塊打包部署Docker的項(xiàng)目實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)SpringBoot多模塊打包部署Docker內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java繪制國(guó)際象棋與中國(guó)象棋棋盤(pán)

    java繪制國(guó)際象棋與中國(guó)象棋棋盤(pán)

    這篇文章主要為大家詳細(xì)介紹了java繪制國(guó)際象棋與中國(guó)象棋棋盤(pán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法

    SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法

    本篇文章主要介紹了SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Java實(shí)現(xiàn)模擬鍵盤(pán)鼠標(biāo)操作工具

    Java實(shí)現(xiàn)模擬鍵盤(pán)鼠標(biāo)操作工具

    在桌面自動(dòng)化、軟件測(cè)試、游戲開(kāi)發(fā)以及遠(yuǎn)程控制等領(lǐng)域中,模擬鍵盤(pán)和鼠標(biāo)操作是一項(xiàng)非常實(shí)用的技術(shù),本文將使用?Java?實(shí)現(xiàn)一個(gè)模擬鍵盤(pán)與鼠標(biāo)操作的工具,希望對(duì)大家有所幫助
    2025-03-03
  • SpringMVC上傳圖片代碼實(shí)例

    SpringMVC上傳圖片代碼實(shí)例

    這篇文章主要介紹了SpringMVC上傳圖片代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Java超詳細(xì)講解三大特性之一的多態(tài)

    Java超詳細(xì)講解三大特性之一的多態(tài)

    多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過(guò)該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量到底會(huì)指向哪個(gè)類的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定
    2022-05-05
  • SpringMVC的注解@RequestMapping屬性及使用

    SpringMVC的注解@RequestMapping屬性及使用

    這篇文章主要為大家介紹了SpringMVC注解@RequestMapping屬性及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • java string類的常用方法詳細(xì)介紹

    java string類的常用方法詳細(xì)介紹

    在開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)使用到j(luò)ava string類的方法,本文將以此問(wèn)題進(jìn)行詳細(xì)介紹
    2012-11-11
  • 代碼詳解java里的“==”和“equels”區(qū)別

    代碼詳解java里的“==”和“equels”區(qū)別

    本篇文章通過(guò)實(shí)例代碼給大家詳細(xì)解釋了java里的“==”和“equels”區(qū)別,對(duì)此有興趣的朋友跟著小編一起學(xué)習(xí)下。
    2018-02-02
  • Java實(shí)現(xiàn)二分搜索樹(shù)的示例代碼

    Java實(shí)現(xiàn)二分搜索樹(shù)的示例代碼

    二分搜索樹(shù)是一顆二叉樹(shù),二分搜索樹(shù)每個(gè)節(jié)點(diǎn)的左子樹(shù)的值都小于該節(jié)點(diǎn)的值,每個(gè)節(jié)點(diǎn)右子樹(shù)的值都大于該節(jié)點(diǎn)的值。本文將利用Java實(shí)現(xiàn)二分搜索樹(shù),需要的可以參考一下
    2022-03-03
  • springboot+maven多環(huán)境動(dòng)態(tài)配置及編譯失敗的解決方案(步驟詳解)

    springboot+maven多環(huán)境動(dòng)態(tài)配置及編譯失敗的解決方案(步驟詳解)

    這篇文章主要介紹了springboot+maven多環(huán)境動(dòng)態(tài)配置及編譯失敗的解決方案,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11

最新評(píng)論