Spring Boot 容器化Docker+K8s 部署最佳實(shí)踐
在微服務(wù)架構(gòu)盛行的當(dāng)下,Spring Boot 因簡(jiǎn)化開(kāi)發(fā)、快速迭代的特性成為主流開(kāi)發(fā)框架。而容器化部署(Docker)與編排(K8s)則解決了微服務(wù)部署中的環(huán)境一致性、彈性伸縮、故障自愈等核心問(wèn)題。本文將從實(shí)踐出發(fā),詳細(xì)講解 Spring Boot 應(yīng)用從 Docker 鏡像構(gòu)建到 K8s 部署的完整流程,包含可直接復(fù)用的示例代碼,并拓展鏡像優(yōu)化、K8s 進(jìn)階配置等實(shí)用技巧,幫助開(kāi)發(fā)者快速掌握容器化部署的最佳實(shí)踐。
一、前置知識(shí)與環(huán)境準(zhǔn)備
在開(kāi)始實(shí)踐前,需確保本地環(huán)境已完成以下工具的安裝與配置,避免后續(xù)操作中出現(xiàn)環(huán)境兼容問(wèn)題:
- JDK 8+:Spring Boot 應(yīng)用開(kāi)發(fā)與運(yùn)行基礎(chǔ),需配置 JAVA_HOME 環(huán)境變量
- Maven/Gradle:項(xiàng)目構(gòu)建工具,本文以 Maven 為例
- Docker:容器化核心工具,支持鏡像構(gòu)建與容器運(yùn)行(Windows 建議使用 WSL2 后端,Mac 直接安裝 Docker Desktop)
- K8s 集群:用于應(yīng)用編排,本地可使用 Minikube、Kind 或 Docker Desktop 內(nèi)置的 K8s;生產(chǎn)環(huán)境建議使用云廠商集群(阿里云 ACK、騰訊云 TKE 等)
- kubectl:K8s 命令行工具,用于與 K8s 集群交互,需配置集群訪問(wèn)權(quán)限(~/.kube/config)
驗(yàn)證環(huán)境:執(zhí)行 docker --version、kubectl cluster-info 命令,若輸出正常則說(shuō)明環(huán)境配置完成。
二、Spring Boot 示例項(xiàng)目搭建
為簡(jiǎn)化演示,我們搭建一個(gè)基礎(chǔ)的 Spring Boot Web 項(xiàng)目,提供一個(gè)測(cè)試接口,用于后續(xù)容器化驗(yàn)證。
2.1 項(xiàng)目初始化(使用 Spring Initializr)
訪問(wèn) Spring Initializr,配置如下:
- Project:Maven Project
- Language:Java
- Spring Boot:2.7.x(穩(wěn)定版)
- Dependencies:Spring Web(核心依賴,用于提供 Web 接口)
下載項(xiàng)目后解壓,導(dǎo)入 IDE(IntelliJ IDEA 或 Eclipse)。
2.2 編寫(xiě)測(cè)試接口
在項(xiàng)目包下創(chuàng)建 controller 目錄,新增 HelloController.java 類,提供一個(gè)簡(jiǎn)單的 GET 接口:
package com.example.springbootdocker.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 測(cè)試接口控制器
*/
@RestController
@RequestMapping("/api")
public class HelloController {
/**
* 測(cè)試接口:返回容器化部署成功信息
* @return 字符串響應(yīng)
*/
@GetMapping("/hello")
public String hello() {
return "Spring Boot 容器化部署成功!Docker + K8s 最佳實(shí)踐";
}
}2.3 本地測(cè)試項(xiàng)目
運(yùn)行項(xiàng)目主啟動(dòng)類 SpringBootDockerApplication.java,啟動(dòng)成功后,訪問(wèn) http://localhost:8080/api/hello,若能正常返回響應(yīng)內(nèi)容,則說(shuō)明項(xiàng)目搭建無(wú)誤。
三、Docker 構(gòu)建 Spring Boot 鏡像(核心步驟)
Docker 鏡像作為容器的模板,是容器化部署的基礎(chǔ)。構(gòu)建 Spring Boot 鏡像的核心是編寫(xiě) Dockerfile,定義鏡像的構(gòu)建流程。本節(jié)將講解兩種常用的構(gòu)建方式:基礎(chǔ)構(gòu)建法與多階段構(gòu)建法(推薦,可減小鏡像體積)。
3.1 基礎(chǔ)構(gòu)建法(適合入門(mén))
3.1.1 編寫(xiě) Dockerfile
在項(xiàng)目根目錄下創(chuàng)建Dockerfile 文件(無(wú)后綴),內(nèi)容如下,每一行都附帶詳細(xì)注釋:
### 第一步:指定基礎(chǔ)鏡像(Java 運(yùn)行環(huán)境) # 選擇 openjdk 8 鏡像(與項(xiàng)目 JDK 版本一致),alpine 版本體積更小 FROM openjdk:8-jre-alpine ### 第二步:設(shè)置工作目錄(容器內(nèi)的目錄,類似本地的工作文件夾) WORKDIR /app ### 第三步:復(fù)制本地構(gòu)建好的 Jar 包到容器內(nèi) # 注意:此處 Jar 包名稱需與 Maven 構(gòu)建后的名稱一致(可在 pom.xml 中配置固定名稱) # 格式:COPY 本地文件路徑 容器內(nèi)目標(biāo)路徑 COPY target/spring-boot-docker-0.0.1-SNAPSHOT.jar app.jar ### 第四步:暴露容器端口(僅聲明,不實(shí)際映射,用于文檔說(shuō)明) # 與 Spring Boot 項(xiàng)目配置的 server.port 一致(默認(rèn) 8080) EXPOSE 8080 ### 第五步:設(shè)置容器啟動(dòng)命令(運(yùn)行 Jar 包) # ENTRYPOINT 用于指定容器啟動(dòng)的固定命令,不可被覆蓋 ENTRYPOINT ["java", "-jar", "app.jar"]
3.1.2 配置 Maven 固定 Jar 包名稱
默認(rèn)情況下,Maven 構(gòu)建的 Jar 包名稱包含版本號(hào)和 SNAPSHOT 后綴,不利于 Dockerfile 中統(tǒng)一引用??稍?code>pom.xml 中添加配置,固定 Jar 包名稱:
<build>
<finalName>spring-boot-app</finalName> <!-- 固定 Jar 包名稱為 spring-boot-app.jar -->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>3.1.3 構(gòu)建 Docker 鏡像
首先使用 Maven 構(gòu)建項(xiàng)目,生成 Jar 包:
mvn clean package -Dmaven.test.skip=true # 跳過(guò)測(cè)試,快速構(gòu)建
構(gòu)建成功后,項(xiàng)目根目錄的 target 文件夾下會(huì)生成 spring-boot-app.jar 文件。接著執(zhí)行 Docker 構(gòu)建命令:
# 格式:docker build -t 鏡像名稱:版本號(hào) 構(gòu)建上下文路徑(. 表示當(dāng)前目錄) docker build -t spring-boot-app:v1.0 .
構(gòu)建完成后,執(zhí)行 docker images 命令,若能看到 spring-boot-app:v1.0 鏡像,則說(shuō)明構(gòu)建成功。
3.1.4 本地運(yùn)行 Docker 容器驗(yàn)證
使用構(gòu)建好的鏡像啟動(dòng)容器,映射本地端口 8080 到容器端口 8080:
docker run -d -p 8080:8080 --name spring-boot-container spring-boot-app:v1.0
參數(shù)說(shuō)明:
- -d:后臺(tái)運(yùn)行容器
- -p 8080:8080:端口映射,格式為 本地端口:容器端口
- –name:指定容器名稱,便于后續(xù)管理
驗(yàn)證:訪問(wèn) http://localhost:8080/api/hello,若返回正常響應(yīng),說(shuō)明容器運(yùn)行無(wú)誤。可通過(guò) docker logs spring-boot-container 查看容器運(yùn)行日志。
3.2 多階段構(gòu)建法(推薦,鏡像瘦身)
基礎(chǔ)構(gòu)建法存在一個(gè)問(wèn)題:構(gòu)建過(guò)程依賴本地已構(gòu)建好的 Jar 包,且若本地環(huán)境與構(gòu)建環(huán)境不一致,可能導(dǎo)致鏡像構(gòu)建失敗。多階段構(gòu)建法可在 Dockerfile 中完成 “項(xiàng)目構(gòu)建 → 生成 Jar 包 → 構(gòu)建運(yùn)行鏡像” 的全流程,且能大幅減小鏡像體積(僅保留運(yùn)行所需的 JRE 環(huán)境,刪除構(gòu)建依賴)。
3.2.1 編寫(xiě)多階段 Dockerfile
### 第一階段:構(gòu)建階段(使用 Maven 鏡像構(gòu)建項(xiàng)目,生成 Jar 包) FROM maven:3.6.3-openjdk-8 AS build # 命名為 build 階段,后續(xù)可引用 WORKDIR /project COPY pom.xml . # 先復(fù)制 pom.xml,利用 Docker 緩存機(jī)制(依賴不變時(shí)無(wú)需重新下載) COPY src ./src # 復(fù)制項(xiàng)目源碼 RUN mvn clean package -Dmaven.test.skip=true # 構(gòu)建項(xiàng)目,生成 Jar 包到 target 目錄 ### 第二階段:運(yùn)行階段(使用輕量的 JRE 鏡像,僅保留運(yùn)行所需文件) FROM openjdk:8-jre-alpine WORKDIR /app # 從構(gòu)建階段復(fù)制 Jar 包到當(dāng)前階段(僅復(fù)制最終產(chǎn)物,減小鏡像體積) COPY --from=build /project/target/spring-boot-app.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
優(yōu)勢(shì)說(shuō)明:多階段構(gòu)建的鏡像體積通常比基礎(chǔ)構(gòu)建法小 50% 以上(Maven 鏡像約 800MB,JRE 鏡像僅 100MB 左右),更適合生產(chǎn)環(huán)境部署。
3.2.2 構(gòu)建并驗(yàn)證多階段鏡像
docker build -t spring-boot-app:v2.0 . # 構(gòu)建多階段鏡像,版本號(hào)設(shè)為 v2.0 docker run -d -p 8081:8080 --name spring-boot-container-v2 spring-boot-app:v2.0
訪問(wèn) http://localhost:8081/api/hello,驗(yàn)證容器運(yùn)行正常。執(zhí)行 docker images 對(duì)比 v1.0 和 v2.0 鏡像體積,可明顯看到 v2.0 更小。
四、K8s 部署 Spring Boot 應(yīng)用(最佳實(shí)踐)
Docker 解決了 “打包鏡像” 的問(wèn)題,而 K8s 則解決了 “鏡像編排” 的問(wèn)題(如多實(shí)例部署、負(fù)載均衡、故障自愈、彈性伸縮等)。本節(jié)將講解 K8s 部署的核心資源(Deployment、Service),并提供完整的 YAML 配置文件。
4.1 K8s 核心資源說(shuō)明
部署 Spring Boot 應(yīng)用需用到兩個(gè)核心資源:
- Deployment:用于管理 Pod(K8s 最小部署單元,包含一個(gè)或多個(gè)容器),支持創(chuàng)建、更新、回滾 Pod,實(shí)現(xiàn)故障自愈(Pod 異常時(shí)自動(dòng)重啟)和擴(kuò)縮容。
- Service:用于暴露 Pod 對(duì)外訪問(wèn),解決 Pod 動(dòng)態(tài)變化(IP 不固定)的問(wèn)題。通過(guò) Service 可實(shí)現(xiàn)負(fù)載均衡(分發(fā)請(qǐng)求到多個(gè) Pod 實(shí)例)。
4.2 編寫(xiě) Deployment YAML 配置
在項(xiàng)目根目錄下創(chuàng)建 deployment.yaml 文件,內(nèi)容如下(附帶詳細(xì)注釋):
apiVersion: apps/v1 # API 版本(Deployment 屬于 apps 組,v1 為穩(wěn)定版)
kind: Deployment # 資源類型:Deployment
metadata:
name: spring-boot-deploy # Deployment 名稱
labels:
app: spring-boot-app # 標(biāo)簽:用于關(guān)聯(lián) Service 和 Pod
spec:
replicas: 2 # 部署的 Pod 實(shí)例數(shù)量(生產(chǎn)環(huán)境建議至少 2 個(gè),保證高可用)
selector:
matchLabels:
app: spring-boot-app # 選擇器:匹配帶有 app=spring-boot-app 標(biāo)簽的 Pod
template:
metadata:
labels:
app: spring-boot-app # Pod 標(biāo)簽:必須與 selector.matchLabels 一致
spec:
containers:
- name: spring-boot-container # 容器名稱
image: spring-boot-app:v2.0 # 容器鏡像(本地鏡像,若為集群需推送至鏡像倉(cāng)庫(kù))
ports:
- containerPort: 8080 # 容器暴露的端口(與 Spring Boot 端口一致)
resources: # 資源限制(避免單個(gè) Pod 占用過(guò)多資源,影響其他應(yīng)用)
requests: # 最小資源需求(K8s 調(diào)度時(shí)確保節(jié)點(diǎn)有足夠資源)
cpu: "100m" # 100m = 0.1 CPU
memory: "256Mi" # 256MB 內(nèi)存
limits: # 最大資源限制(超出則會(huì)被 K8s 限制或終止)
cpu: "500m"
memory: "512Mi"
livenessProbe: # 存活探針(檢測(cè)容器是否存活,失敗則重啟容器)
httpGet:
path: /actuator/health # Spring Boot Actuator 健康檢查接口(需添加依賴)
port: 8080
initialDelaySeconds: 60 # 容器啟動(dòng)后延遲 60 秒開(kāi)始探測(cè)
periodSeconds: 10 # 探測(cè)間隔 10 秒
readinessProbe: # 就緒探針(檢測(cè)容器是否就緒,失敗則移除 Service 轉(zhuǎn)發(fā))
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 30
periodSeconds: 54.2.1 添加 Spring Boot Actuator 依賴
上述配置中使用了 /actuator/health 健康檢查接口,需在 pom.xml 中添加 Actuator 依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>并在 application.yml 中配置 Actuator 暴露健康檢查接口:
management:
endpoints:
web:
exposure:
include: health # 暴露 health 接口(默認(rèn)僅暴露 /actuator/health)
endpoint:
health:
show-details: always # 顯示健康檢查詳細(xì)信息(開(kāi)發(fā)環(huán)境用,生產(chǎn)環(huán)境建議關(guān)閉)重新構(gòu)建鏡像(docker build -t spring-boot-app:v2.0 .),確保健康檢查接口可用。
4.3 編寫(xiě) Service YAML 配置
創(chuàng)建 service.yaml 文件,用于暴露 Deployment 管理的 Pod 對(duì)外訪問(wèn),配置如下:
apiVersion: v1 # API 版本(Service 屬于核心組,v1 為穩(wěn)定版)
kind: Service # 資源類型:Service
metadata:
name: spring-boot-service # Service 名稱
spec:
type: NodePort # Service 類型:NodePort(適合測(cè)試環(huán)境,暴露節(jié)點(diǎn)端口供外部訪問(wèn))
# type: LoadBalancer # 生產(chǎn)環(huán)境推薦使用,云廠商會(huì)自動(dòng)創(chuàng)建負(fù)載均衡器
selector:
app: spring-boot-app # 選擇器:匹配帶有 app=spring-boot-app 標(biāo)簽的 Pod(與 Deployment 一致)
ports:
- port: 8080 # Service 暴露的端口(集群內(nèi)部訪問(wèn)端口)
targetPort: 8080 # 目標(biāo)端口(Pod 中容器暴露的端口,與 Deployment 一致)
nodePort: 30080 # 節(jié)點(diǎn)端口(外部訪問(wèn)端口,范圍:30000-32767,可自定義)注意:NodePort 類型僅適合測(cè)試環(huán)境,生產(chǎn)環(huán)境建議使用 LoadBalancer 類型(云廠商提供)或 Ingress(統(tǒng)一入口管理)。
4.4 執(zhí)行 K8s 部署
4.4.1 部署 Deployment 和 Service
使用 kubectl apply 命令執(zhí)行部署(需確保 K8s 集群正常運(yùn)行):
kubectl apply -f deployment.yaml # 部署 Deployment kubectl apply -f service.yaml # 部署 Service
4.4.2 查看部署狀態(tài)
執(zhí)行以下命令查看部署狀態(tài),確認(rèn)所有資源正常運(yùn)行:
kubectl get deployments # 查看 Deployment 狀態(tài)(READY 應(yīng)為 2/2,代表 2 個(gè) Pod 就緒) kubectl get pods # 查看 Pod 狀態(tài)(STATUS 應(yīng)為 Running) kubectl get services # 查看 Service 狀態(tài)(確認(rèn) NodePort 為 30080)
若 Pod 狀態(tài)異常,可通過(guò) kubectl describe pod <pod名稱> 查看詳細(xì)日志,排查問(wèn)題(常見(jiàn)問(wèn)題:鏡像拉取失敗、端口占用、健康檢查失敗等)。
4.4.3 驗(yàn)證應(yīng)用訪問(wèn)
本地環(huán)境(Minikube/Kind/Docker Desktop K8s):直接訪問(wèn) http://localhost:30080/api/hello,若返回響應(yīng)內(nèi)容,則說(shuō)明部署成功。
集群環(huán)境(云廠商):訪問(wèn) http://<節(jié)點(diǎn)IP>:30080/api/hello(需確保節(jié)點(diǎn) 30080 端口對(duì)外開(kāi)放)。
五、關(guān)鍵拓展:鏡像優(yōu)化與 K8s 進(jìn)階配置
本節(jié)將拓展一些實(shí)用技巧,幫助優(yōu)化容器化部署效果,適配生產(chǎn)環(huán)境需求。
5.1 Docker 鏡像優(yōu)化技巧
- 使用更輕量的基礎(chǔ)鏡像:優(yōu)先選擇 alpine 版本(如
openjdk:8-jre-alpine),或使用 Distroless 鏡像(僅包含應(yīng)用和運(yùn)行時(shí)依賴,體積更小,安全性更高)。 - 清理構(gòu)建殘留:多階段構(gòu)建中,在構(gòu)建階段清理 Maven 依賴緩存(如
RUN mvn clean package && rm -rf ~/.m2),減小構(gòu)建階段鏡像體積。 - 鏡像分層緩存:Dockerfile 中,將不變的內(nèi)容(如復(fù)制 pom.xml、下載依賴)放在前面,變化的內(nèi)容(如復(fù)制源碼、構(gòu)建項(xiàng)目)放在后面,利用 Docker 分層緩存機(jī)制,加速鏡像構(gòu)建。
- 使用非 root 用戶運(yùn)行容器:默認(rèn)情況下,容器以 root 用戶運(yùn)行,存在安全風(fēng)險(xiǎn)??稍?Dockerfile 中創(chuàng)建普通用戶,切換用戶運(yùn)行容器:
# 在運(yùn)行階段添加以下配置 RUN addgroup -S appgroup && adduser -S appuser -G appgroup # 創(chuàng)建用戶組和用戶 USER appuser # 切換為普通用戶運(yùn)行容器
5.2 K8s 進(jìn)階配置技巧
- 配置 ConfigMap 和 Secret:將 Spring Boot 配置文件(application.yml)或敏感信息(數(shù)據(jù)庫(kù)密碼、密鑰)存儲(chǔ)在 K8s ConfigMap/Secret 中,避免硬編碼到鏡像中,實(shí)現(xiàn)配置動(dòng)態(tài)更新。
- 示例(ConfigMap 存儲(chǔ) application.yml):
apiVersion: v1 kind: ConfigMap metadata: name: spring-boot-config data: application.yml: | server: port: 8080 management: endpoints: web: exposure: include: health在 Deployment 中掛載 ConfigMap:spec: template: spec: containers: - name: spring-boot-container image: spring-boot-app:v2.0 volumeMounts: - name: config-volume mountPath: /app/config # 掛載路徑(Spring Boot 會(huì)自動(dòng)讀取 config 目錄下的配置) volumes: - name: config-volume configMap: name: spring-boot-config # 關(guān)聯(lián) ConfigMap 名稱 - 實(shí)現(xiàn)彈性伸縮:通過(guò) K8s HPA(Horizontal Pod Autoscaler)實(shí)現(xiàn) Pod 彈性伸縮,根據(jù) CPU 使用率或自定義指標(biāo)自動(dòng)增減 Pod 實(shí)例數(shù)量:
- `apiVersion: autoscaling/v2
- kind: HorizontalPodAutoscaler
- metadata:
- name: spring-boot-hpa
- spec:
- scaleTargetRef:
- apiVersion: apps/v1
- kind: Deployment
- name: spring-boot-deploy # 關(guān)聯(lián) Deployment 名稱
- minReplicas: 2 # 最小 Pod 數(shù)量
- maxReplicas: 10 # 最大 Pod 數(shù)量
- metrics:
- type: Resource
- resource:
- name: cpu
- target:
- type: Utilization
- averageUtilization: 70 # CPU 使用率超過(guò) 70% 時(shí)自動(dòng)擴(kuò)容
- `
- 配置日志收集:生產(chǎn)環(huán)境需統(tǒng)一收集容器日志,推薦使用 ELK 棧(Elasticsearch + Logstash + Kibana)或云廠商日志服務(wù)??稍?Deployment 中配置日志輸出路徑,掛載日志卷,便于日志收集:
spec: template: spec: containers: - name: spring-boot-container image: spring-boot-app:v2.0 volumeMounts: - name: log-volume mountPath: /app/logs # 日志輸出路徑 volumes: - name: log-volume emptyDir: {} # 臨時(shí)目錄(生產(chǎn)環(huán)境建議使用 PersistentVolume 持久化)
六、總結(jié)
本文詳細(xì)講解了 Spring Boot 應(yīng)用容器化部署的完整流程:從基礎(chǔ)環(huán)境準(zhǔn)備、示例項(xiàng)目搭建,到 Docker 鏡像構(gòu)建(基礎(chǔ)構(gòu)建法與多階段構(gòu)建法),再到 K8s 核心資源(Deployment、Service)的部署與驗(yàn)證,最后拓展了鏡像優(yōu)化、K8s 進(jìn)階配置等實(shí)用技巧。通過(guò)本文的實(shí)踐,開(kāi)發(fā)者可快速掌握 Docker+K8s 部署 Spring Boot 應(yīng)用的最佳實(shí)踐,解決環(huán)境一致性、彈性伸縮、故障自愈等核心問(wèn)題。
在實(shí)際生產(chǎn)環(huán)境中,還需結(jié)合業(yè)務(wù)需求,進(jìn)一步優(yōu)化配置(如使用 Ingress 統(tǒng)一入口、配置監(jiān)控告警、實(shí)現(xiàn) CI/CD 自動(dòng)部署等),提升應(yīng)用的可用性和可維護(hù)性。希望本文能為開(kāi)發(fā)者的容器化實(shí)踐提供有力的參考和幫助。
到此這篇關(guān)于Spring Boot 容器化Docker+K8s 部署最佳實(shí)踐的文章就介紹到這了,更多相關(guān)springboot docker k8s部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot+Docker+K8s云原生部署全流程(從零到發(fā)布)
- K8S(Docker)如何優(yōu)雅的關(guān)閉SpringBoot微服務(wù)
- 利用Docker容器化部署springboot應(yīng)用(過(guò)程詳解)
- SpringBoot+Docker+Graylog 如何讓錯(cuò)誤自動(dòng)報(bào)警
- Docker部署SpringBoot項(xiàng)目教程(完整版)
- SpringBoot制作Docker鏡像接入SkyWalking的詳細(xì)過(guò)程
- docker部署springBoot項(xiàng)目實(shí)操(docker是什么)
相關(guān)文章
Java異常處理運(yùn)行時(shí)異常(RuntimeException)詳解及實(shí)例
這篇文章主要介紹了 Java異常處理運(yùn)行時(shí)異常(RuntimeException)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下http://time.qq.com/?pgv_ref=aiotime2017-05-05
Java中ByteBuddy動(dòng)態(tài)字節(jié)碼操作庫(kù)的使用技術(shù)指南
ByteBuddy?是一個(gè)功能強(qiáng)大的?Java?字節(jié)碼操作庫(kù),可以幫助開(kāi)發(fā)者在運(yùn)行時(shí)動(dòng)態(tài)生成和修改類,而無(wú)需直接接觸復(fù)雜的?ASM?API,本文給大家介紹了Java?ByteBuddy動(dòng)態(tài)字節(jié)碼操作庫(kù)的使用技術(shù)指南,需要的朋友可以參考下2025-04-04
Spring下token過(guò)期時(shí)間分平臺(tái)(web和app)設(shè)置方法
本文詳細(xì)介紹了在Spring環(huán)境下,針對(duì)web端和APP端實(shí)現(xiàn)不同token過(guò)期時(shí)間的方法,通過(guò)整合SpringBoot、springSecurity和JWT框架,文章講解了登錄流程、JWT的基本組成以及token鑒權(quán)的核心步驟,需要的朋友可以參考下2024-10-10
Springboot使用thymeleaf動(dòng)態(tài)模板實(shí)現(xiàn)刷新
這篇文章主要介紹了Springboot使用thymeleaf動(dòng)態(tài)模板實(shí)現(xiàn)刷新,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
java 鍵盤(pán)輸入一個(gè)數(shù),輸出數(shù)組中指定元素的示例
今天小編就為大家分享一篇java 鍵盤(pán)輸入一個(gè)數(shù),輸出數(shù)組中指定元素的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

