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

使用Maven將Java項(xiàng)目打包為Docker鏡像的實(shí)戰(zhàn)方法

 更新時(shí)間:2026年02月09日 09:50:33   作者:Jinkxs  
本文介紹了兩種使用Maven將Java項(xiàng)目打包為Docker鏡像的實(shí)戰(zhàn)方法: Google Jib插件方案:無(wú)需Dockerfile,直接通過(guò)Maven插件構(gòu)建鏡像,優(yōu)勢(shì)包括分層構(gòu)建、安全高效、鏡像體積小,特別適合SpringBoot項(xiàng)目,文章詳細(xì)展示了使用Maven構(gòu)建Java項(xiàng)目并生成Docker鏡像的完整流程

引言

在云原生時(shí)代,容器化(Containerization) 已成為現(xiàn)代應(yīng)用部署的標(biāo)準(zhǔn)范式。Docker 憑借其輕量、可移植、一致性的優(yōu)勢(shì),徹底改變了軟件交付流程。而作為 Java 生態(tài)中最主流的構(gòu)建工具,Maven 如何與 Docker 無(wú)縫集成,高效地將 Spring Boot 或普通 Java 應(yīng)用打包為 Docker 鏡像,是每一位 Java 開(kāi)發(fā)者必須掌握的核心技能。

本文將帶你從零開(kāi)始,深入實(shí)戰(zhàn) 使用 Maven 構(gòu)建 Java 項(xiàng)目并生成 Docker 鏡像的完整流程。我們將覆蓋:

  • 傳統(tǒng)手動(dòng)構(gòu)建鏡像的痛點(diǎn)
  • 使用 Jib 插件 實(shí)現(xiàn)“零 Dockerfile”構(gòu)建
  • 使用 Dockerfile + Maven Resources 插件 精細(xì)控制鏡像內(nèi)容
  • 多階段構(gòu)建(Multi-stage Build)優(yōu)化鏡像大小
  • 鏡像標(biāo)簽策略、推送私有倉(cāng)庫(kù)、CI/CD 集成
  • 安全最佳實(shí)踐與性能調(diào)優(yōu)

全文包含大量可運(yùn)行代碼示例、Mermaid 架構(gòu)圖、真實(shí)外鏈資源(均經(jīng)驗(yàn)證可訪問(wèn)),助你打造生產(chǎn)級(jí) Java 容器化流水線。

為什么需要將 Java 項(xiàng)目容器化?

盡管 Java 應(yīng)用“一次編寫(xiě),到處運(yùn)行”,但在實(shí)際部署中仍面臨諸多挑戰(zhàn):

  • 環(huán)境差異:開(kāi)發(fā)機(jī)(macOS)、測(cè)試服務(wù)器(Ubuntu)、生產(chǎn)集群(CentOS)的 JDK 版本、系統(tǒng)庫(kù)不一致。
  • 依賴沖突:應(yīng)用依賴的本地庫(kù)(如 native lib)在不同機(jī)器缺失。
  • 部署復(fù)雜:需手動(dòng)配置 JVM 參數(shù)、日志路徑、啟動(dòng)腳本。
  • 資源隔離差:多個(gè)應(yīng)用共享同一臺(tái)服務(wù)器,互相影響。

Docker 的價(jià)值

  • 環(huán)境一致性:鏡像包含 OS + JDK + App,徹底消除“在我機(jī)器上能跑”問(wèn)題。
  • 快速部署:docker run 一鍵啟動(dòng),無(wú)需安裝 JDK。
  • 資源隔離:CPU、內(nèi)存、網(wǎng)絡(luò)獨(dú)立分配。
  • 彈性伸縮:配合 Kubernetes 輕松實(shí)現(xiàn)水平擴(kuò)展。

傳統(tǒng)方式:手寫(xiě) Dockerfile + 手動(dòng)構(gòu)建

最直觀的方式是先用 Maven 打包 JAR,再編寫(xiě) Dockerfile 構(gòu)建鏡像。

步驟 1:Maven 打包

mvn clean package -DskipTests

生成 target/myapp-1.0.0.jar

步驟 2:編寫(xiě) Dockerfile

# 使用官方 OpenJDK 17 鏡像
FROM openjdk:17-jdk-slim

# 設(shè)置工作目錄
WORKDIR /app

# 復(fù)制 JAR 文件到容器
COPY target/myapp-1.0.0.jar app.jar

# 暴露端口(假設(shè)應(yīng)用監(jiān)聽(tīng) 8080)
EXPOSE 8080

# 啟動(dòng)命令
ENTRYPOINT ["java", "-jar", "app.jar"]

步驟 3:構(gòu)建并運(yùn)行鏡像

# 構(gòu)建鏡像
docker build -t myapp:1.0.0 .

# 運(yùn)行容器
docker run -d -p 8080:8080 --name myapp-container myapp:1.0.0

? 優(yōu)點(diǎn):簡(jiǎn)單直觀,適合學(xué)習(xí)
? 缺點(diǎn)

  • 需維護(hù) Dockerfile
  • 構(gòu)建過(guò)程分兩步(Maven + Docker),效率低
  • 鏡像體積大(含完整 JDK)
  • 無(wú)法利用 Maven 生命周期自動(dòng)化

方案一:使用 Google Jib 插件 —— “零 Dockerfile” 構(gòu)建 

Jib 是 Google 開(kāi)源的 Maven/Gradle 插件,專為 Java 應(yīng)用容器化設(shè)計(jì)。它無(wú)需 Dockerfile、無(wú)需本地 Docker daemon,直接從 Maven 構(gòu)建鏡像并推送到倉(cāng)庫(kù)。

核心優(yōu)勢(shì)

  • 分層構(gòu)建:將應(yīng)用拆分為 dependencies、snapshot dependencies、resources、classes 多層,僅變更代碼時(shí)只需上傳少量層。
  • 安全:不依賴本地 Docker,避免權(quán)限問(wèn)題。
  • 快速:直接與 Registry 通信,跳過(guò)本地鏡像存儲(chǔ)。
  • 小體積:默認(rèn)使用 distroless 基礎(chǔ)鏡像(僅含必要運(yùn)行時(shí))。

官方 GitHub(持續(xù)活躍):https://github.com/GoogleContainerTools/jib

實(shí)戰(zhàn):Spring Boot 項(xiàng)目集成 Jib

1. 在pom.xml中添加插件

<build>
    <plugins>
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>jib-maven-plugin</artifactId>
            <version>3.4.0</version>
            <configuration>
                <!-- 目標(biāo)鏡像名 -->
                <to>
                    <image>myregistry.com/myapp:${project.version}</image>
                </to>
                <!-- 基礎(chǔ)鏡像(可選) -->
                <from>
                    <image>eclipse-temurin:17-jre-alpine</image>
                </from>
                <!-- 容器配置 -->
                <container>
                    <ports>
                        <port>8080</port>
                    </ports>
                    <environment>
                        <SPRING_PROFILES_ACTIVE>prod</SPRING_PROFILES_ACTIVE>
                    </environment>
                    <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
                </container>
            </configuration>
        </plugin>
    </plugins>
</build>

2. 構(gòu)建并推送到本地 Docker 守護(hù)進(jìn)程

# 構(gòu)建鏡像并加載到本地 Docker
mvn jib:dockerBuild

# 查看鏡像
docker images | grep myapp

3. 推送到遠(yuǎn)程倉(cāng)庫(kù)(如 Docker Hub)

# 先登錄
docker login

# 推送(需在 <to> 中配置鏡像名,如 yourname/myapp)
mvn jib:build

提示:若使用私有倉(cāng)庫(kù)(如 Harbor、Nexus),需配置認(rèn)證信息(見(jiàn)后文)。

Jib 分層機(jī)制 Mermaid 圖示

優(yōu)勢(shì)體現(xiàn):當(dāng)僅修改業(yè)務(wù)代碼時(shí),只有 Classes Layer 變更,推送速度極快!

方案二:Dockerfile + Maven Resources 插件 —— 精細(xì)控制

當(dāng)需要完全掌控鏡像內(nèi)容(如添加 shell 腳本、配置文件、非 Java 資源),可結(jié)合 Maven Resources 插件Dockerfile。

項(xiàng)目結(jié)構(gòu)設(shè)計(jì)

myapp/
├── src/
├── pom.xml
├── docker/
│   ├── Dockerfile
│   └── entrypoint.sh
└── target/
    └── myapp-1.0.0.jar

1. 配置 Maven 將資源復(fù)制到 target/docker

pom.xml 中添加:

<build>
    <plugins>
        <!-- 復(fù)制 Docker 相關(guān)文件到 target/docker -->
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.1</version>
            <executions>
                <execution>
                    <id>copy-docker-resources</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/docker</outputDirectory>
                        <resources>
                            <resource>
                                <directory>docker</directory>
                                <filtering>false</filtering>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- 打包 JAR -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

2. 編寫(xiě)增強(qiáng)版 Dockerfile

docker/Dockerfile:

# 構(gòu)建階段:使用 JDK 編譯(若需在容器內(nèi)編譯)
# FROM maven:3.8.6-openjdk-17 AS builder
# COPY . /app
# WORKDIR /app
# RUN mvn clean package -DskipTests

# 運(yùn)行階段:僅使用 JRE
FROM eclipse-temurin:17-jre-alpine

# 安裝必要工具(如 curl、bash)
RUN apk add --no-cache bash curl

# 創(chuàng)建應(yīng)用用戶(安全最佳實(shí)踐)
RUN addgroup -g 1001 -S appuser && \
    adduser -u 1001 -S appuser -G appuser

# 設(shè)置工作目錄
WORKDIR /app

# 復(fù)制 JAR 和啟動(dòng)腳本
COPY myapp-*.jar app.jar
COPY entrypoint.sh /app/entrypoint.sh

# 賦予執(zhí)行權(quán)限
RUN chmod +x /app/entrypoint.sh

# 切換到非 root 用戶
USER appuser

# 暴露端口
EXPOSE 8080

# 啟動(dòng)腳本(可處理信號(hào)、設(shè)置 JVM 參數(shù)等)
ENTRYPOINT ["/app/entrypoint.sh"]

docker/entrypoint.sh:

#!/bin/bash
set -e

# 設(shè)置默認(rèn) JVM 參數(shù)
JVM_OPTS="${JVM_OPTS:-"-Xms256m -Xmx512m"}"

# 處理優(yōu)雅關(guān)閉(接收 SIGTERM)
function shutdown() {
    echo "Shutting down gracefully..."
    kill -TERM "$PID"
    wait "$PID"
    exit 0
}

# 啟動(dòng) Java 應(yīng)用
java $JVM_OPTS -jar app.jar &
PID=$!

# 注冊(cè)信號(hào)處理器
trap shutdown SIGTERM SIGINT

# 等待應(yīng)用結(jié)束
wait $PID

3. 構(gòu)建鏡像

# 先執(zhí)行 Maven 構(gòu)建(復(fù)制資源 + 打包 JAR)
mvn clean package -DskipTests

# 再構(gòu)建 Docker 鏡像
docker build -t myapp:1.0.0 target/docker

適用場(chǎng)景

  • 需要自定義啟動(dòng)邏輯
  • 集成非 Java 組件(如 Python 腳本)
  • 嚴(yán)格的安全合規(guī)要求(非 root 用戶、最小化 OS)

多階段構(gòu)建(Multi-stage Build):極致優(yōu)化鏡像大小

Java 應(yīng)用鏡像常因包含完整 JDK 而臃腫(>500MB)。多階段構(gòu)建 可將構(gòu)建環(huán)境與運(yùn)行環(huán)境分離,顯著減小體積。

示例:Spring Boot + Multi-stage

# 第一階段:構(gòu)建
FROM maven:3.8.6-eclipse-temurin-17 AS builder

# 復(fù)制 pom.xml 和源碼
COPY pom.xml .
COPY src ./src

# 執(zhí)行 Maven 構(gòu)建(緩存依賴)
RUN mvn clean package -DskipTests

# 第二階段:運(yùn)行
FROM eclipse-temurin:17-jre-alpine

# 從 builder 階段復(fù)制 JAR
COPY --from=builder /target/*.jar app.jar

EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

構(gòu)建效果對(duì)比

方式鏡像大小是否含 Maven/JDK
單階段(openjdk:17)~450 MB
多階段(jre-alpine)~180 MB
Jib(distroless)~120 MB

建議:生產(chǎn)環(huán)境優(yōu)先使用 Jib + distroless多階段 + alpine

鏡像標(biāo)簽策略:語(yǔ)義化版本與 Git Commit ID

合理的鏡像標(biāo)簽(Tag)便于追蹤和回滾。

推薦策略

場(chǎng)景標(biāo)簽示例說(shuō)明
發(fā)布版本v1.2.0與 Git tag 對(duì)應(yīng)
開(kāi)發(fā)快照dev-abc1234dev- + Git commit short SHA
最新穩(wěn)定版latest謹(jǐn)慎使用,避免意外升級(jí)

在 Maven 中動(dòng)態(tài)生成標(biāo)簽

利用 git-commit-id-plugin 獲取 Git 信息:

<plugin>
    <groupId>pl.project13.maven</groupId>
    <artifactId>git-commit-id-plugin</artifactId>
    <version>8.0.2</version>
    <executions>
        <execution>
            <goals>
                <goal>revision</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <verbose>false</verbose>
        <dateFormat>yyyy.MM.dd HH:mm:ss</dateFormat>
        <generateGitPropertiesFile>true</generateGitPropertiesFile>
        <includeOnlyProperties>
            <includeOnlyProperty>^git.commit.id.abbrev$</includeOnlyProperty>
        </includeOnlyProperties>
    </configuration>
</plugin>

然后在 Jib 配置中使用:

<configuration>
    <to>
        <image>myapp:dev-${git.commit.id.abbrev}</image>
    </to>
</configuration>

插件官網(wǎng):https://github.com/git-commit-id/git-commit-id-maven-plugin

推送鏡像到私有倉(cāng)庫(kù):Harbor/Nexus 示例

企業(yè)通常使用私有鏡像倉(cāng)庫(kù)保障安全。

1. 配置 Jib 推送至 Harbor

<configuration>
    <to>
        <image>harbor.example.com/project/myapp:${project.version}</image>
        <auth>
            <username>admin</username>
            <password>Harbor12345</password>
        </auth>
    </to>
</configuration>

安全提示:密碼不應(yīng)硬編碼!應(yīng)使用 Maven Settings 或 CI/CD Secrets。

2. 使用 Maven Settings 管理憑證

~/.m2/settings.xml:

<settings>
    <servers>
        <server>
            <id>harbor-registry</id>
            <username>admin</username>
            <password>Harbor12345</password>
        </server>
    </servers>
</settings>

pom.xml 中引用:

<configuration>
    <to>
        <image>harbor.example.com/project/myapp</image>
        <auth>
            <username>${settings.servers.harbor-registry.username}</username>
            <password>${settings.servers.harbor-registry.password}</password>
        </auth>
    </to>
</configuration>

3. CI/CD 中使用 Secrets(GitHub Actions 示例)

- name: Build and Push with Jib
  run: mvn jib:build
  env:
    JIB_REGISTRY_USERNAME: ${{ secrets.HARBOR_USER }}
    JIB_REGISTRY_PASSWORD: ${{ secrets.HARBOR_TOKEN }}

GitHub Secrets 文檔:https://docs.github.com/en/actions/security-guides/encrypted-secrets

安全最佳實(shí)踐:掃描漏洞與最小化攻擊面

容器鏡像可能包含已知漏洞(CVE),需主動(dòng)防御。

1. 使用 Trivy 掃描鏡像

Trivy 是開(kāi)源漏洞掃描器。

# 安裝 Trivy(macOS)
brew install aquasecurity/trivy/trivy

# 掃描本地鏡像
trivy image myapp:1.0.0

輸出示例:

myapp:1.0.0 (alpine 3.17.2)
============================
Total: 2 (UNKNOWN: 0, LOW: 1, MEDIUM: 1, HIGH: 0, CRITICAL: 0)

2. 在 CI 中集成掃描

- name: Scan Docker image
  run: |
    docker build -t myapp:latest .
    trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:latest

Trivy 官網(wǎng)(活躍維護(hù)):https://aquasecurity.github.io/trivy/

3. 其他安全建議

  • 使用非 root 用戶運(yùn)行(見(jiàn)前文 Dockerfile)
  • 禁用 Shell:distroless 鏡像默認(rèn)無(wú) shell,防止入侵后執(zhí)行命令
  • 定期更新基礎(chǔ)鏡像:訂閱安全公告,及時(shí) rebuild

性能調(diào)優(yōu):JVM 與容器資源匹配

容器環(huán)境中的 JVM 需正確識(shí)別 CPU/內(nèi)存限制。

問(wèn)題:JVM 忽略 Docker 內(nèi)存限制

舊版 JVM(<8u131, <9)無(wú)法感知 -m 512m 等 Docker 內(nèi)存限制,導(dǎo)致 OOM。

解決方案

1. 使用新版 JDK(推薦)

JDK 10+ 默認(rèn)啟用 Container Awareness,JDK 8u191+ 需手動(dòng)開(kāi)啟:

ENTRYPOINT ["java", "-XX:+UseContainerSupport", "-jar", "app.jar"]

2. 顯式設(shè)置堆內(nèi)存

# 通過(guò)環(huán)境變量控制
ENV JAVA_OPTS="-Xmx300m -Xms300m"
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]

3. 使用 Jib 自動(dòng)配置

Jib 默認(rèn)添加 -XX:+UseContainerSupport,無(wú)需額外配置。

Oracle 官方文檔:JDK 8 Updates for Docker

CI/CD 集成:GitHub Actions 完整流水線

下面是一個(gè)完整的 GitHub Actions Workflow,實(shí)現(xiàn) 代碼提交 → 構(gòu)建 → 掃描 → 推送。

name: Build and Push Docker Image

on:
  push:
    branches: [ main ]
    tags: [ 'v*' ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: Cache Maven packages
        uses: actions/cache@v3
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}

      - name: Build with Maven
        run: mvn -B clean verify

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Extract metadata (tags, labels)
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: myname/myapp
          tags: |
            type=ref,event=branch
            type=semver,pattern={{version}}
            type=sha

      - name: Build and push with Jib
        run: mvn jib:build -Djib.to.image=${{ steps.meta.outputs.tags }}

      - name: Scan image with Trivy
        run: |
          docker pull ${{ steps.meta.outputs.tags }}
          trivy image --exit-code 1 --severity HIGH,CRITICAL ${{ steps.meta.outputs.tags }}

流程說(shuō)明

  1. 拉取代碼
  2. 設(shè)置 JDK + 緩存 Maven 依賴
  3. 執(zhí)行單元測(cè)試
  4. 登錄 Docker Hub
  5. 自動(dòng)生成語(yǔ)義化標(biāo)簽
  6. 使用 Jib 構(gòu)建并推送
  7. 安全掃描,高危漏洞阻斷發(fā)布

常見(jiàn)問(wèn)題排查指南

問(wèn)題 1:Jib 構(gòu)建失敗,提示“Cannot connect to the Docker daemon”

原因:使用了 jib:build(需推送遠(yuǎn)程倉(cāng)庫(kù)),但未配置 registry 認(rèn)證。

解決

  • 改用 jib:dockerBuild(僅構(gòu)建到本地)
  • 或正確配置 <to><auth> 或 Maven Settings

問(wèn)題 2:容器啟動(dòng)后立即退出

原因:ENTRYPOINT 命令執(zhí)行完畢,容器生命周期結(jié)束。

解決

  • 確保 Java 進(jìn)程在前臺(tái)運(yùn)行(不要加 &
  • 檢查應(yīng)用是否拋出異常(docker logs container_name

問(wèn)題 3:鏡像太大,超過(guò) 500MB

解決

  • 改用 eclipse-temurin:17-jre-alpine 或 Jib 的 distroless
  • 使用多階段構(gòu)建
  • 排查是否誤將 src/target/ 全量復(fù)制

問(wèn)題 4:時(shí)區(qū)不正確

解決:在 Dockerfile 中設(shè)置時(shí)區(qū)

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

方案對(duì)比:Jib vs Dockerfile + Maven ??

特性JibDockerfile + Maven
是否需要 Dockerfile? 否? 是
是否需要本地 Docker? 否(jib:build
? 是(jib:dockerBuild
? 是
鏡像分層優(yōu)化? 自動(dòng)分層?? 需手動(dòng)設(shè)計(jì)
構(gòu)建速度? 極快(僅傳變更層)?? 較慢(全量構(gòu)建)
控制粒度中(插件配置)? 極高(任意命令)
學(xué)習(xí)成本
適用場(chǎng)景標(biāo)準(zhǔn) Java 應(yīng)用復(fù)雜定制需求

結(jié)論

  • 90% 場(chǎng)景用 Jib:快速、安全、高效
  • 10% 場(chǎng)景用 Dockerfile:需深度定制(如集成 sidecar、特殊 init 流程)

結(jié)語(yǔ):擁抱云原生,從容器化開(kāi)始

將 Java 應(yīng)用容器化不再是“可選項(xiàng)”,而是現(xiàn)代軟件工程的“必修課”。Maven 與 Docker 的結(jié)合,為我們提供了從構(gòu)建到部署的端到端解決方案。無(wú)論是使用 Jib 的便捷性,還是 Dockerfile 的靈活性,核心目標(biāo)都是:交付一致、安全、高效的容器鏡像。

記住:好的容器化不是終點(diǎn),而是云原生旅程的起點(diǎn)。下一步,你可以探索:

  • 使用 Helm 管理 Kubernetes 部署
  • 集成 Prometheus + Grafana 監(jiān)控
  • 實(shí)現(xiàn)藍(lán)綠發(fā)布/金絲雀發(fā)布

以上就是使用Maven將Java項(xiàng)目打包為Docker鏡像的實(shí)戰(zhàn)方法的詳細(xì)內(nèi)容,更多關(guān)于Maven將Java打包為Docker鏡像的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入探究Java編程是值傳遞還是引用傳遞

    深入探究Java編程是值傳遞還是引用傳遞

    大家好,本篇文章主要講的是Java編程是值傳遞還是引用傳遞的探究,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-04-04
  • 基于Java SSM框架實(shí)現(xiàn)簡(jiǎn)易的評(píng)教系統(tǒng)

    基于Java SSM框架實(shí)現(xiàn)簡(jiǎn)易的評(píng)教系統(tǒng)

    這篇文章主要介紹了通過(guò)Java SSM框架實(shí)現(xiàn)一個(gè)簡(jiǎn)易的評(píng)教系統(tǒng)的示例代碼,文中的代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-02-02
  • java通過(guò)DelayQueue實(shí)現(xiàn)延時(shí)任務(wù)

    java通過(guò)DelayQueue實(shí)現(xiàn)延時(shí)任務(wù)

    本文主要介紹了java通過(guò)DelayQueue實(shí)現(xiàn)延時(shí)任務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SpringBoot項(xiàng)目導(dǎo)入外部jar包的詳細(xì)指南

    SpringBoot項(xiàng)目導(dǎo)入外部jar包的詳細(xì)指南

    在開(kāi)發(fā)SpringBoot項(xiàng)目時(shí),我們經(jīng)常需要引入一些外部的jar包來(lái)增強(qiáng)項(xiàng)目的功能,這些jar包可能不是Maven中央倉(cāng)庫(kù)中的,或者我們想要使用特定版本的jar包,本文將詳細(xì)介紹如何在SpringBoot項(xiàng)目中導(dǎo)入外部jar包,需要的朋友可以參考下
    2024-10-10
  • Spring BPP中如何優(yōu)雅的創(chuàng)建動(dòng)態(tài)代理Bean詳解

    Spring BPP中如何優(yōu)雅的創(chuàng)建動(dòng)態(tài)代理Bean詳解

    這篇文章主要給大家介紹了關(guān)于Spring BPP中如何優(yōu)雅的創(chuàng)建動(dòng)態(tài)代理Bean的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 基于java流實(shí)現(xiàn)壓縮圖片過(guò)程解析

    基于java流實(shí)現(xiàn)壓縮圖片過(guò)程解析

    這篇文章主要介紹了基于java流實(shí)現(xiàn)壓縮圖片過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • spring中的DI步驟詳解

    spring中的DI步驟詳解

    本文主要介紹了bean的裝配實(shí)現(xiàn)過(guò)程,通常對(duì)于簡(jiǎn)單數(shù)據(jù)類型數(shù)據(jù)初始主要在獲得對(duì)象后,使用setter方法完成,所謂的裝配主要是復(fù)雜數(shù)據(jù)類型的依賴注入,感興趣的朋友一起看看吧
    2023-11-11
  • Java中實(shí)現(xiàn)String字符串用逗號(hào)隔開(kāi)

    Java中實(shí)現(xiàn)String字符串用逗號(hào)隔開(kāi)

    這篇文章主要介紹了Java中實(shí)現(xiàn)String字符串用逗號(hào)隔開(kāi),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 詳解在SpringBoot中@Transactional事物操作和事物無(wú)效問(wèn)題排查

    詳解在SpringBoot中@Transactional事物操作和事物無(wú)效問(wèn)題排查

    這篇文章主要介紹了詳解在SpringBoot中@Transactional事物操作和事物無(wú)效問(wèn)題排查,本文詳細(xì)的介紹了SpringBoot中集成使用@Transactional注解操作事物以及事物開(kāi)啟后無(wú)效的問(wèn)題排查,需要的朋友可以參考下
    2021-06-06
  • Java訪問(wèn)修飾符public、private、protected及默認(rèn)訪問(wèn)權(quán)限詳解

    Java訪問(wèn)修飾符public、private、protected及默認(rèn)訪問(wèn)權(quán)限詳解

    這篇文章主要介紹了Java訪問(wèn)修飾符public、private、protected及默認(rèn)訪問(wèn)權(quán)限的相關(guān)資料,每種修飾符都有其特定的使用場(chǎng)景,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01

最新評(píng)論

定安县| 樟树市| 会泽县| 化州市| 江门市| 东阿县| 黑河市| 开原市| 临邑县| 诸城市| 邹城市| 沭阳县| 金沙县| 清新县| 太康县| 武山县| 大丰市| 德清县| 旅游| 余庆县| 武川县| 宁海县| 湖口县| 镇江市| 大新县| 山东| 错那县| 江山市| 城固县| 昌江| 常德市| 阜康市| 中牟县| 青河县| 汝城县| 深州市| 雅江县| 云和县| 盐边县| 清水县| 平舆县|