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

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

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

前言

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

Maven管理多模塊項目

在項目過大后都會對項目通過多模塊的方式進(jìn)行拆分,下面來說一下拆分多模塊的操作步驟。

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

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

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

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

pom文件

接下來看各個模塊的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)容是我們的各個子模塊。由于這個demo項目是使用Spring Initializr自動生成的,它給出的是parent是Spring Boot Starter,這一塊暫時先不要改動。build標(biāo)簽里使用了spring boot的maven插件,這個插件會在我們使用maven打包時打包成一個jar包,一個jar包運(yùn)行也是spring boot的精髓所在。也就是說,使用spring boot maven plugin打好的jar包,只需要一個命令 java -jar yourjar.jar 就可以運(yùn)行了。

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

除此之外,還需要注意的一個點(diǎn)是,由于我們讓service和web繼承了父模塊,因此也會繼承了父模塊的打包組件spring boot maven plugin,在打包時也會把這兩個模塊打成spring boot格式的jar包,而這種格式需要有一個主類作為入口(就是我們的spring boot啟動類),但是我們這兩個都是服務(wù)模塊并沒有啊。因此還需要在打包的時候做一些調(diào)整,使用下面的 build 標(biāo)簽來跳過打可執(zhí)行jar包的步驟,讓這兩個模塊打出來的是普通的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制作一個鏡像,然后在鏡像中運(yùn)行我們的自己的多模塊項目。前邊提到,只需要將main模塊打好的jar包使用 java -jar 命令執(zhí)行一下就能啟動了。因此把這個打好的jar包放到鏡像里就可以了。西面是docker file的編寫:

# 使用基礎(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"]

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

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

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

相關(guān)文章

  • 優(yōu)化MyBatis-Plus批量插入策略方式

    優(yōu)化MyBatis-Plus批量插入策略方式

    文章介紹了MyBatis-Plus的saveBatch方法雖然方便,但效率較低,提出了InsertBatchSomeColumn插件,可以在批量插入數(shù)據(jù)時只插入部分需要的列,從而提高效率,通過配置和代碼示例,展示了如何在項目中使用該插件進(jìn)行批量插入操作
    2026-01-01
  • IDEA 2020.3 更新了機(jī)器學(xué)習(xí)都整上了

    IDEA 2020.3 更新了機(jī)器學(xué)習(xí)都整上了

    IDEA 歡迎窗口全新升級,首頁增加三個選項卡,一個用于設(shè)置 IDE 界面的 Customize,一個用于插件安裝的 Plugins,一個于訪問幫助和學(xué)習(xí)資源的 Learn IntelliJ IDEA,另外包括之前用于管理項目的 Projects,需要的朋友可以參考下
    2020-12-12
  • mybatis攔截器與分頁插件實(shí)例教程

    mybatis攔截器與分頁插件實(shí)例教程

    Mybatis攔截器常常會被用來進(jìn)行分頁處理。所以下面這篇文章主要給大家介紹了關(guān)于mybatis攔截器與分頁插件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • SpringBoot整合TKMyBatis實(shí)現(xiàn)單表增刪改查操作

    SpringBoot整合TKMyBatis實(shí)現(xiàn)單表增刪改查操作

    據(jù)說tk.mybatis能夠讓我不寫sql代碼就可以所有單表操作問題,作為熱愛偷懶的我,怎么能放過這種機(jī)會。talk is cheap, show me the code。趕緊搞個例子爽一把先
    2023-01-01
  • 解讀RabbitMQ和kafka的相同點(diǎn)和不同點(diǎn)是什么

    解讀RabbitMQ和kafka的相同點(diǎn)和不同點(diǎn)是什么

    RabbitMQ和Kafka都是消息中間件,支持分布式系統(tǒng)、高可用性和可靠性,RabbitMQ使用隊列模型,適合復(fù)雜路由場景;Kafka使用主題-分區(qū)模型,適合大規(guī)模數(shù)據(jù)流處理,RabbitMQ在低延遲方面表現(xiàn)更好,Kafka在高吞吐量方面表現(xiàn)更好
    2024-12-12
  • 淺析java中next與nextLine用法對比

    淺析java中next與nextLine用法對比

    這篇文章主要介紹了java中next與nextLine用法區(qū)別以及實(shí)例分析了他們的區(qū)別,需要的朋友可以參考下
    2017-04-04
  • Mybatis-plus的service通用接口解讀

    Mybatis-plus的service通用接口解讀

    這篇文章主要介紹了Mybatis-plus的service通用接口解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot項目運(yùn)行一段時間后自動關(guān)閉的坑及解決

    SpringBoot項目運(yùn)行一段時間后自動關(guān)閉的坑及解決

    這篇文章主要介紹了SpringBoot項目運(yùn)行一段時間后自動關(guān)閉的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java集合類arraylist循環(huán)中刪除特定元素的方法

    java集合類arraylist循環(huán)中刪除特定元素的方法

    下面小編就為大家?guī)硪黄狫ava集合類ArrayList循環(huán)中刪除特定元素的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 學(xué)習(xí)JVM之java內(nèi)存區(qū)域與異常

    學(xué)習(xí)JVM之java內(nèi)存區(qū)域與異常

    關(guān)于JVM內(nèi)存區(qū)域的知識對于初學(xué)者來說其實(shí)是很重要的,了解Java內(nèi)存分配的原理,這對于以后JAVA的學(xué)習(xí)會有更深刻的理解。下面來看看詳細(xì)介紹。
    2016-07-07

最新評論

岱山县| 三穗县| 麻阳| 安远县| 津市市| 纳雍县| 漳州市| 巫溪县| 平谷区| 枞阳县| 高唐县| 望奎县| 山东| 错那县| 广汉市| 宜丰县| 明水县| 宁强县| 尉犁县| 博爱县| 东明县| 行唐县| 麻江县| 苍南县| 毕节市| 乐陵市| 营口市| 奉节县| 昌图县| 泸定县| 金坛市| 湘阴县| 达拉特旗| 田阳县| 棋牌| 仁怀市| 高尔夫| 梨树县| 襄城县| 新化县| 南川市|