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

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

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

引言

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

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

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

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

為什么需要將 Java 項目容器化?

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

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

Docker 的價值

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

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

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

步驟 1:Maven 打包

mvn clean package -DskipTests

生成 target/myapp-1.0.0.jar

步驟 2:編寫 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)聽 8080)
EXPOSE 8080

# 啟動命令
ENTRYPOINT ["java", "-jar", "app.jar"]

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

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

# 運行容器
docker run -d -p 8080:8080 --name myapp-container myapp:1.0.0

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

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

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

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

核心優(yōu)勢

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

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

實戰(zhàn):Spring Boot 項目集成 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)程倉庫(如 Docker Hub)

# 先登錄
docker login

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

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

Jib 分層機制 Mermaid 圖示

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

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

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

項目結(jié)構(gòu)設(shè)計

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. 編寫增強版 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

# 運行階段:僅使用 JRE
FROM eclipse-temurin:17-jre-alpine

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

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

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

# 復(fù)制 JAR 和啟動腳本
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

# 啟動腳本(可處理信號、設(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
}

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

# 注冊信號處理器
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

適用場景

  • 需要自定義啟動邏輯
  • 集成非 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)境與運行環(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

# 第二階段:運行
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)建效果對比

方式鏡像大小是否含 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)簽策略:語義化版本與 Git Commit ID

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

推薦策略

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

在 Maven 中動態(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

推送鏡像到私有倉庫:Harbor/Nexus 示例

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

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

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

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

1. 使用 Trivy 掃描鏡像

Trivy 是開源漏洞掃描器。

# 安裝 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 用戶運行(見前文 Dockerfile)
  • 禁用 Shell:distroless 鏡像默認(rèn)無 shell,防止入侵后執(zhí)行命令
  • 定期更新基礎(chǔ)鏡像:訂閱安全公告,及時 rebuild

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

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

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

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

解決方案

1. 使用新版 JDK(推薦)

JDK 10+ 默認(rèn)啟用 Container Awareness,JDK 8u191+ 需手動開啟:

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

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

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

3. 使用 Jib 自動配置

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

Oracle 官方文檔:JDK 8 Updates for Docker

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

下面是一個完整的 GitHub Actions Workflow,實現(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 }}

流程說明

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

常見問題排查指南

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

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

解決

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

問題 2:容器啟動后立即退出

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

解決

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

問題 3:鏡像太大,超過 500MB

解決

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

問題 4:時區(qū)不正確

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

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

方案對比:Jib vs Dockerfile + Maven ??

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

結(jié)論

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

結(jié)語:擁抱云原生,從容器化開始

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    spring中的DI步驟詳解

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

    Java中實現(xiàn)String字符串用逗號隔開

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

    詳解在SpringBoot中@Transactional事物操作和事物無效問題排查

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

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

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

最新評論

历史| 阳曲县| 日喀则市| 澄江县| 三门峡市| 化德县| 新蔡县| 太湖县| 禹城市| 太和县| 河源市| 江安县| 阳朔县| 大悟县| 枝江市| 博野县| 滨海县| 循化| 奎屯市| 香格里拉县| 北海市| 普兰县| 宝应县| 嵊泗县| 潢川县| 荆门市| 河源市| 眉山市| 浏阳市| 黄浦区| 宝山区| 乌兰县| 河西区| 中西区| 科技| 纳雍县| 西盟| 自贡市| 富锦市| 清水县| 綦江县|