SpringBoot多模塊打包部署Docker的項目實戰(zhàn)
前言
我們好多程序員都只關(guān)注功能代碼的編寫,在一些運維工作上則顯得略有不足。這篇文章通過介紹最常見的Maven管理的Spring Boot項目多模塊打包部署Docker來介紹一下項目部署過程中操作流程和幾個需要注意的點。文章假設(shè)讀者有前面提到的技術(shù)點的前置知識,不過沒有也沒關(guān)系,所涉及到的點都比較簡單。
Maven管理多模塊項目
在項目過大后都會對項目通過多模塊的方式進行拆分,下面來說一下拆分多模塊的操作步驟。
首先看一下現(xiàn)在的目錄結(jié)構(gòu)。注意現(xiàn)在的項目是使用gradle進行構(gòu)建的,隨后我會把它轉(zhuǎn)為使用maven構(gòu)建。:

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


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

接下來以類似的方式進行整理,整理過后的項目結(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標簽內(nèi)的內(nèi)容是我們的各個子模塊。由于這個demo項目是使用Spring Initializr自動生成的,它給出的是parent是Spring Boot Starter,這一塊暫時先不要改動。build標簽里使用了spring boot的maven插件,這個插件會在我們使用maven打包時打包成一個jar包,一個jar包運行也是spring boot的精髓所在。也就是說,使用spring boot maven plugin打好的jar包,只需要一個命令 java -jar yourjar.jar 就可以運行了。
我們再梳理一遍各個模塊之間的關(guān)系:common是各個模塊所依賴的工具模塊,它里邊的實現(xiàn)可以不依賴spring,因此不需要使用上面的打包工具,也不用依賴于父模塊來獲得父級依賴(主要是spring)。service模塊是服務(wù)層代碼所在的模塊,需要依賴父模塊以繼承spring的依賴。web模塊存放的是controller相關(guān)的實現(xiàn),當然也需要依賴父模塊,由于需要使用服務(wù)層代碼,當然也需要依賴service模塊。main模塊是spring boot啟動類所在的模塊,前面提到的打成一個jar包實際上就是去jar里尋找這個啟動類。再由啟動類帶動其余的service模塊、web模塊運行。因此main塊還需要依賴service和web模塊。
除此之外,還需要注意的一個點是,由于我們讓service和web繼承了父模塊,因此也會繼承了父模塊的打包組件spring boot maven plugin,在打包時也會把這兩個模塊打成spring boot格式的jar包,而這種格式需要有一個主類作為入口(就是我們的spring boot啟動類),但是我們這兩個都是服務(wù)模塊并沒有啊。因此還需要在打包的時候做一些調(diào)整,使用下面的 build 標簽來跳過打可執(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制作一個鏡像,然后在鏡像中運行我們的自己的多模塊項目。前邊提到,只需要將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 # 運行 Spring Boot 應(yīng)用程序 CMD ["java", "-jar", "app.jar"]
寫完docker file后運行下面命令來制作鏡像: sudo docker build -t demoApp . 不要忘記最后有個 . 。
鏡像制作好后使用下面命令來后臺啟動容器并將端口映射為8080: sudo docker -d demoApp -p 8080:8080 ?,F(xiàn)在就可以在瀏覽器中訪問你部署好的項目了。
到此這篇關(guān)于SpringBoot多模塊打包部署Docker的項目實戰(zhàn)的文章就介紹到這了,更多相關(guān)SpringBoot多模塊打包部署Docker內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot服務(wù)docker打包分層的實現(xiàn)
- 將Java(SpringBoot)項目打包為Docker鏡像的三種方法
- 淺析如何將多個SpringBoot項目打包到一個Docker容器中
- Docker打包SpringBoot鏡像的實現(xiàn)方式
- SpringBoot打包成Docker鏡像的項目實踐
- SpringBoot打包成Docker鏡像的幾種實現(xiàn)方式
- 一步步教你把SpringBoot項目打包成Docker鏡像
- SpringBoot打包docker鏡像發(fā)布的詳細步驟
- Springboot打包為Docker鏡像并部署的實現(xiàn)
- SpringBoot3.x打包Docker容器的實現(xiàn)
- Springboot微服務(wù)打包Docker鏡像流程解析
- Springboot打包docker的多種方法實現(xiàn)
相關(guān)文章
Javaweb使用cors完成跨域ajax數(shù)據(jù)交互
本文由跨域、cors的概念開始,進而向大家介紹了Javaweb使用cors完成跨域ajax數(shù)據(jù)交互的相關(guān)內(nèi)容,需要的朋友可以了解下。2017-09-09
聊聊Spring循環(huán)依賴三級緩存是否可以減少為二級緩存的情況
這篇文章主要介紹了聊聊Spring循環(huán)依賴三級緩存是否可以減少為二級緩存的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Springboot打包代碼,反編譯后代碼混淆方式(防止還原代碼)
文章主要介紹了如何對Spring Boot項目進行jar包混淆,以防止反編譯還原原始代碼,通過在項目中添加proguard.cfg文件并配置Maven插件,可以實現(xiàn)代碼混淆,從而增加反編譯的難度2024-11-11
基于SpringBoot + Redis實現(xiàn)密碼暴力破解防護
在現(xiàn)代應(yīng)用程序中,保護用戶密碼的安全性是至關(guān)重要的,密碼暴力破解是指通過嘗試多個密碼組合來非法獲取用戶賬戶的密碼,為了保護用戶密碼不被暴力破解,我們可以使用Spring Boot和Redis來實現(xiàn)一些防護措施,本文將介紹如何利用這些技術(shù)來防止密碼暴力破解攻擊2023-06-06
Dependency ‘XXX:‘ not found問題的三步解決
這篇文章主要介紹了Dependency ‘XXX:‘ not found問題的三步解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01

