Render上后端部署Springboot + 前端Vue 问题及解决方案汇总

有一个 Vue 前端 和 Spring Boot 后端的动态网页游戏,当前在本地的 5173 端口和运行。你希望生成一个公开链接,让所有点击链接的人都能访问并玩这个游戏。由于游戏原本需要在本地执行 npm install 后才能启动,你现在想知道在部署时是选择 Render 还是 Heroku,并且哪一个能支持你的 Spring Boot 后端。最后,你需要知道选择其中一种平台后,每一步具体的部署流程是什么。

部分 需要创建 Render 类型 Root Directory Build Command Start Command / Publish Directory
后端 (Spring Boot) 1 次 Web Service backend/(如果有的话) mvn clean install java -jar target/your-app.jar
前端 (Vue 3) 1 次 Static Site frontend/(如果有的话) npm install && npm run build dist

注意:

1 Render上不支持直接部署Jar,必须把springboot项目先用dockerfile制作成容器,只能部署docker容器

2 Docker不支持直接构建springboot,必须先使用maven image构建和运行

3 Windows家庭版不能使用Docker,必须先开启wsl2

4 不要信ChatGPT给你提供的image版本,一定要自己去docker hub上的tags里找!


如何在 Render 上部署 Spring Boot 后端?

你想让 Render 直接从 GitHub 项目部署,所以按照下面步骤来做:

第一步:确保你的 GitHub 代码正确
  1. application.properties 里加上server.port=${PORT:8080} 这样 Render 就能正确读取 PORT 环境变量,不用再手动指定端口

    复制代码
    server.port=${PORT:8080}
  2. 检查 pom.xml,确保有 spring-boot-maven-plugin 这个插件会帮你打包 .jar,Render 需要它。

    复制代码
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  3. 把这些改动 push 到 GitHub


第二步:在 Render 上创建 Web Service
  1. 点击"New Web Service" 连接 GitHub 并选择你的后端项目仓库。
  2. 填写部署配置
    • Build Command(构建命令):

      复制代码
      mvn clean install
    • Start Command(启动命令):

      复制代码
      java -jar target/your-app.jar

总结:

  • 在 Render 上创建 Web Service

  • 连接 GitHub 代码

  • 设置 Build Command: mvn clean install

  • 设置 Start Command: java -jar target/your-app.jar

  • 等待 Render 自动构建,获取后端 URL

  • 修改 Vue 前端,让前端请求 Render 后端的 API

  • 部署 Vue 前端(可以用 Render 的 Static Site 或 Netlify)


初始部署失败:一开始没有docker,试图直接运行jar

  • 错误信息:

    复制代码
    bash: line 1: mvn: command not found
    ==> Build failed 😞
  • 原因: 你在 Render 的 Web Service 直接配置了 mvn clean install 作为构建命令,但 Render 默认不安装 Maven,也不能直接运行jar( Web service里的选项里没有)

还有个初始的初始错误,一开始都没有打包,试图直接运行源码。
问题 1: mvn clean installjava -jar target/your-app.jar 需要在本地运行吗? 可以在本地运行 mvn clean install,看看是否成功生成 .jar 文件(在 target/ 目录下)。不是必须的,但可以用来提前检查是否有问题。

问题 2:我已经构建过了,但为什么你说需要 mvn clean install
Maven 运行 ≠ 生成 JAR ,你需要 mvn clean install 来打包 JAR,放进docker file里。你的理解: 你直接用 Maven 运行了项目,并且本地能成功运行,所以你认为已经完成了构建。我解释: 本地直接运行 Spring Boot 项目(mvn spring-boot:run)时,Maven 会自动编译代码并运行,但不会生成一个可执行的 JAR 文件。在 Render 或其他部署平台上,你需要一个 Docker容器而不是一个jar包,而doc文件又必须是**"构建可执行的 JAR 文件再运行"** ,而不是仅仅运行源码。所以,你需要 mvn clean install 来打包应用


使用 Docker 部署

1. 创建 Dockerfilebackend/ 目录下创建 Dockerfile:确保 mvnw 文件存在于项目根目录

Dockerfile位置:后端项目根目录,和mvnw ,pom同级

复制代码
 F:\git_local\Tic-Tac-Toe\backend 的目录

2025/02/06  13:27    <DIR>          .mvn
2025/02/08  16:23               502 Dockerfile
2025/02/06  14:01               300 HELP.md
2025/02/06  13:27            10,665 mvnw
2025/02/06  13:27             6,912 mvnw.cmd
2025/02/07  13:23             2,134 pom.xml
2025/02/06  13:27    <DIR>          src
2025/02/08  15:48    <DIR>          target

2. Render 上选择 Docker 作为语言: 创建新 Web Service → 选择 Docker 语言 → 填写 Git 仓库信息 → 完成部署设置。

为什么不能直接在 Dockerfile 中直接使用 Spring Boot 的基础镜像?

Dockerfile 中无法直接使用类似 FROM springboot-oraclejre-nanoserver:latest 的镜像,原因如下:

  1. Spring Boot 没有官方基础镜像

    Spring Boot 本身是一个基于 Java 的框架,其运行依赖 JDK/JRE 环境,而不是独立的操作系统或运行时。因此,构建 Spring Boot 应用的 Docker 镜像时,应选择 JDK 或 JRE 基础镜像 (如 openjdkeclipse-temurin),而非虚构的 "Spring Boot 镜像"310。

  2. 构建与运行分离的多阶段构建需求

    Spring Boot 应用需要通过 Maven 或 Gradle 编译打包生成可执行的 JAR 文件,再将 JAR 文件复制到轻量级运行环境中。典型的 Dockerfile 分为两个阶段:

    • 构建阶段 :使用 Maven 镜像(如 maven:3.8.7-openjdk-17)执行 mvn clean package 生成 JAR 文件。

    • 运行阶段 :使用 JDK/JRE 镜像(如 eclipse-temurin:17-jre-slim)运行 JAR 文件4810。

怎么写Dockerfile 来正确运行你的构建产物 target/demo-0.0.1-SNAPSHOT.jar

错误的Dockerfile:

复制代码
# Build stage:
FROM maven:3.8.7-openjdk-17 AS build  实际上根本没有这个镜像,这是gpt自己胡编的!!!!
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests

# Production stage: 
FROM openjdk:17-slim 实际上根本没有这个镜像,这是gpt自己胡编的!!!!
ARG PORT=8080
COPY --from=build /app/target/*.jar /app.jar
EXPOSE ${PORT}
CMD ["sh", "-c", "java -jar /app.jar --server.port=${PORT}"]

(1) **Dockerfile 问题分析**

复制代码
# 错误点 1:COPY 路径错误
COPY ../target/*.jar app.jar  # 无法访问父目录
# 正确应为:COPY --from=build /app/target/*.jar app.jar

# 错误点 2:ENTRYPOINT 与 CMD 冲突
ENTRYPOINT ["java","-jar","/app.jar"]  # 覆盖后续 CMD 参数
CMD ["sh", "-c", "java -jar /app/app.jar --server.port=$PORT"]  # 冗余且冲突

# 错误点 3:EXPOSE 端口与 ENV 变量未关联
EXPOSE 8080  # 硬编码端口,未使用 ENV PORT

正确的Dockerfile内容:

复制代码
​
# Build stage: 使用 Maven 3.8.7 和 OpenJDK 17 编译项目
FROM maven:3.9.9-eclipse-temurin-17-focal AS build
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests

# Production stage: 使用轻量级 OpenJDK 17 运行 jar 包
FROM openjdk:17-jdk-alpine3.12
ARG PORT=8080
ENV PORT=${PORT}
# 从 build 阶段复制 jar 文件到 /app/app.jar
COPY --from=build /app/target/demo-0.0.1-SNAPSHOT.jar /app/app.jar
EXPOSE 8080
CMD ["sh", "-c", "java -jar /app/app.jar --server.port=${PORT}"]

​

关键改动解释:

1. 关于 Dockerfile 中端口设置的原理
  • EXPOSE 指令的作用

    • EXPOSE 指令仅仅是用来文档化说明容器内部程序将监听哪个端口,并不会真正创建主机与容器之间的端口映射。也就是说,它只是告诉使用者:"这个容器里运行的服务打算在这个端口上提供服务。"
  • 动态端口映射的含义

    • 动态端口映射指的是在容器运行时,通过 docker run -p(或者使用像 Render 这样的部署平台提供的配置)将容器内部的端口映射到主机上的任意指定端口。例如,运行时你可以决定将容器内的 8080 端口映射到主机的 80 端口,这种映射关系是在运行容器时动态配置的。
  • 为什么不建议在 EXPOSE 中使用变量?

    • 虽然 Dockerfile 中可以使用 ARGENV 传递变量,但 EXPOSE 通常要求写定一个静态的端口号,因为它的作用主要是用于说明和自动文档生成,而不是实现真正的端口绑定。同时,在运行时,端口映射完全依赖于你在 docker run 命令中指定的 -p 参数。
2. 分析你的 Dockerfile 各行代码
  • 构建阶段:

    • WORKDIR /app:设置工作目录为 /app
    • COPY . .:将项目所有文件复制到镜像内的 /app 目录。
    • RUN mvn clean package -DskipTests:执行 Maven 构建命令,生成最终的 JAR 包(存放于 /app/target/ 目录下)。
  • 生产阶段:

    • ARG PORT=8080:定义了一个构建参数 PORT,默认值为 8080。注意,这个变量只在构建阶段有效,并不会自动传递到容器的运行环境中。
    • COPY --from=build /app/target/*.jar /app.jar:从构建阶段复制生成的 JAR 包到当前镜像中,并命名为 /app.jar。这里使用通配符可能会复制不止一个文件(例如有 .jar.jar.original),建议直接指定文件名
    • EXPOSE ${PORT}:此行用于声明容器将监听的端口。问题在于:如果没有通过 ENVPORT 设置到运行环境中,可能不会按预期替换变量。另外,EXPOSE 指令只用于文档化目的,不会进行实际的端口映射。
    • CMD ["sh", "-c", "java -jar /app.jar --server.port=${PORT}"]:这一行用来启动应用,并将 --server.port=${PORT} 传递给应用。如果 PORT 没有被正确导入到环境变量中,shell 命令中的 ${PORT} 可能无法按预期替换。
  1. 原 Dockerfile 中 COPY ../target/*.jar 在多阶段构建中无效,需通过 --from=build 直接从构建阶段复制文件
  2. 明确指定 JAR 文件 :避免 .original 文件匹配问题。
  3. ENV 解决 PORT 变量解析问题ENV SERVER_PORT=${PORT}CMD 解析变量。
  4. EXPOSE 8080 :不能用 ${PORT},只能静态声明,动态端口映射要用 docker run -p
  5. WORKDIR /app 让文件结构更清晰 :所有文件都在 /app 下。
  6. ENTRYPOINTCMD 同时使用时,CMD 的参数会附加到 ENTRYPOINT 后。若需动态参数(如 --server.port=$PORT),应统一为 ENTRYPOINT 的 Shell 形式

3. 验证与运行命令建议
(1) **构建命令**
```bash
docker build -t springboot-app:latest .
```

**(2) **运行命令**
```bash

指定自定义端口(如 9090)

docker run -p 9090:9090 -e PORT=9090 springboot-app:latest
```**

**(3) **验证步骤**

  1. 检查镜像是否生成:`docker images | grep springboot-app`
  2. 查看容器日志:`docker logs <container-id>`
  3. 验证端口监听:`curl http://localhost:9090`**

关于 Dockerfile 中端口设置的原理

下面我将尽可能详细地解释在不同场景下端口的含义与变化,分别说明:

a) 生产环境(本地直接运行 Spring Boot)

b) 容器化环境(在 Docker 内运行 Spring Boot)

c) 部署到 Render 上时的环境


1. 本地生产环境(直接运行 Spring Boot)

在本地运行 Spring Boot 时,应用通常默认监听 8080 端口;这时只有一个服务器,就是你所在的本机操作系统运行的 Java 进程。端口 8080是由 Spring Boot 应用本身绑定的,你直接通过浏览器访问 http://localhost:8080 就能访问应用。在这种环境下,并不存在额外的网络隔离或端口转换;只有单一网络环境(你的本机 OS)。

2. 容器化环境(在 Docker 内运行 Spring Boot)

  • 中文 :当你使用 Dockerfile 构建镜像并以容器方式运行 Spring Boot 时,应用仍然会在容器内监听 8080(或你配置的其他端口);也就是说,容器内部的网络环境中,Spring Boot 使用的是 8080 端口。
    English: When you build a Docker image using your Dockerfile and run Spring Boot in a container, the application still listens on port 8080 (or whichever port you have configured) inside the container's network.

  • 中文:这里涉及两个"网络环境"或"服务器":

    • 容器内部:Spring Boot 应用运行在容器内,监听 8080。
    • 宿主机:这是运行 Docker 的机器;如果你希望从本机访问容器内的服务,需要通过端口映射将宿主机的某个端口转发到容器的 8080。

3. 部署到 Render 上时的环境

当你把容器部署到 Render 平台时,Render 提供的运行环境与本地或普通 Docker 环境略有不同。Render 要求你的容器在启动时监听一个由平台指定的端口,这个端口通常会通过环境变量(一般为 PORT)传递给容器.在 Render 的环境中,容器内的 Spring Boot 应用应当使用这个环境变量来确定它要监听的端口。例如,在启动命令中写成 java -jar /app.jar --server.port=$PORT,这样无论 Render 分配哪个端口,应用都能正确监听。

  • 在 Render 部署后,仍然存在两个层面的"端口":

    • 容器内部 :应用按照 Render 提供的 PORT 环境变量进行监听(这可能依然是 8080,也可能是 Render 动态分配的其他值)。
    • Render 平台的外部入口:Render 平台会将外部请求通过负载均衡或反向代理转发到容器内对应的端口;这个外部端口对用户来说可能是透明的,即你只需要提供 Render 分配的 URL。
  • 简而言之,在 Render 上部署时:

    • 你无需手动做 Docker 的端口映射,因为 Render 的平台会自动把外部流量转发到你容器内监听的那个端口(即 $PORT 指定的端口)。Render 的文档建议你的容器务必使用环境变量指定的端口来启动服务,否则外部请求无法正确路由到你的应用。

回答你的具体问题

问题 1:在本地运行、容器化后的情况
  • 本地运行:Spring Boot 默认监听 8080,只有一个服务器(你的本机 OS),端口 8080 由 Spring Boot 占用。
  • 容器化后
    1. 容器内部:Spring Boot 应用依然在容器内部监听 8080(或配置的端口);这属于容器的私有网络。
    2. 宿主机(Docker 主机) :如果你使用 docker run -p 8080:8080 映射端口,则宿主机的 8080 端口会把外部请求转发到容器的 8080。
    3. 设置时,在 Dockerfile 中用 EXPOSE 8080 仅做声明,而实际映射在运行容器时通过 -p 参数指定。
    4. 端口 8080 在容器内部是由 Spring Boot 占用;在宿主机上则由 Docker 端口映射起到转发作用。
    5. 因此,在容器化环境下,从外部看,你有两个网络层次:宿主机端口(映射层)和容器内的服务端口。

问题 2:部署到 Render 后
  • 部署到 Render 上 时,Render 平台会为你的服务提供一个外部入口和 URL,同时通过环境变量(通常为 PORT)告知你的容器应监听哪个端口。

    1. 容器内部 :你的 Spring Boot 应用需要根据环境变量启动,例如使用命令 java -jar /app.jar --server.port=$PORT,这样无论 Render 分配哪个端口,应用都能正确监听。
    2. Render 平台:在 Render 的基础设施中,外部用户访问的是 Render 提供的 URL,Render 的负载均衡器或反向代理会把请求转发到容器内部监听的那个端口。
    3. 整个过程中,你实际上只需要确保容器内部监听的是 Render 指定的端口;外部的端口映射由 Render 自动管理。
    4. 所以,部署到 Render 后:
      • 内部服务端口:由环境变量 $PORT 决定,可能默认是 8080,但 Render 可能分配其他值。
      • 外部入口:由 Render 提供和管理,用户只需通过 Render 提供的 URL 访问,不必关心具体端口。

    定义运行时端口,并将构建参数转换为环境变量

    ARG PORT=8080
    ENV PORT=${PORT}

    明确指定 JAR 文件,避免通配符匹配不确定性

    COPY --from=build /app/target/demo-0.0.1-SNAPSHOT.jar /app/app.jar

    声明服务监听的端口(这里建议直接写数值)

    EXPOSE 8080

    运行 Spring Boot 应用,利用环境变量替换端口

    CMD ["sh", "-c", "java -jar /app/app.jar --server.port=$PORT"]

  • 通过 ENV PORT=${PORT} 将构建参数转换为运行时的环境变量,确保 CMD 中 $PORT 能正确替换。在 EXPOSE 中直接写明 8080,因为该指令只用于文档化,实际端口映射在运行容器时由 Render 或 docker run -p 指定。

  • 变量传递问题 :你在生产阶段使用了 ARG PORT=8080,但这个变量仅在构建时存在。如果你希望在 CMD 中使用这个端口变量,必须通过 ENV 显式地将其传递到容器运行时环境中。

  • EXPOSE 指令的静态要求 :由于 EXPOSE 只是用于说明目的,不会动态绑定端口,所以最好写成静态的数值(例如 EXPOSE 8080),并在运行时利用 docker run -p 来进行真正的端口映射。

  • 部署在 Render 上的注意点:在 Render 这类平台上部署时,通常需要你指定服务监听的固定端口,且端口映射和路由都是由平台配置的。因此,确保你的 Dockerfile 中声明的端口与 Render 平台要求一致就很重要。


你不理解 docker run -p 8080:8080 的作用,尤其是冒号前后 8080 的区别。我们来详细分析:

端口(Port)是计算机网络中的逻辑地址,用来区分同一台机器上不同的服务。例如:

  • 服务器(Server)运行 HTTP 服务(如 Spring Boot)时通常监听端口 8080。

  • 客户端(Client)(如浏览器)通过某个端口(通常是随机分配的 30000-60000 之间的端口)连接到服务器的 8080 端口。

    docker run -p 8080:8080 my-container

  • 左边 8080(宿主机端口): 运行 Docker 容器的机器(比如你的本机或 Render 平台)上的端口。

  • 右边 8080(容器内部端口): 容器内 Spring Boot 运行的端口。

这表示:当访问宿主机的 http://localhost:8080**,Docker 会将请求转发**到容器内部的 **http://容器内部IP:8080**。

转发(Port Forwarding)指的是宿主机 将接收到的请求,自动传递到容器内部的对应端口。

  1. 服务器(Server): 监听某个端口(例如 8080),等待客户端请求。
  2. 客户端(Client): 通过某个端口(通常是随机的)向服务器发送请求。

但在 Docker 里,容器和宿主机相当于两个不同的网络环境

  • 容器内部是自己的小世界,不能直接访问宿主机的端口。
  • 所以 -p 选项的作用就是把宿主机的端口和容器内部的端口连接起来。

问题 2:EXPOSE 8080 在 Render 上是否有用?

这个指令 不会 映射端口,它只是:标注容器内部的应用监听了 8080 端口 供 Docker 容器编排工具(如 Kubernetes 或 Render)参考

2.2 在 Render 上,${PORT} 由谁决定?

  • Render 会分配一个端口 (通常是 10000-60000 之间的随机端口),并将这个端口的值存入环境变量 PORT**`。`**你的 Spring Boot 应用必须监听 `PORT`,否则 Render 无法访问你的服务。

2.3 为什么 EXPOSE 8080 可能没用?

在 Render 上:你并不手动运行 docker run -p,Render 自动 处理端口转发。你的容器必须 监听 $PORT,而不是固定的 8080

所以,Dockerfile 里你应该改成:CMD ["sh", "-c", "java -jar /app.jar --server.port=${PORT}"]

这样,Spring Boot 会监听 Render 分配的端口,而不是默认的 8080


问题 3:Render 上的端口分配

3.1 docker run -p 的作用

docker run -p 作用是手动 映射端口,但在 Render 上,这个过程是自动的,Render 直接处理端口映射,你不需要手动 -p

3.2 Render 上有没有"宿主机"?

在 Render 上:

  • 你的应用运行在一个容器里,没有"宿主机"的概念,Render 直接管理网络。
  • 你只需要监听 $PORT,Render 会自动将外部流量转发进来。
  • Render 分配一个服务器(运行你的容器)。
  • Render 分配一个端口(通常在 10000-60000 之间)。
  • Render 提供一个 URL (例如 https://your-app.onrender.com)。
  • 所有外部请求都会通过这个 URL 进入你的后端。

你不需要关心 Render 具体分配的端口,你的应用只要监听 $PORT,Render 就会正确转发。


### Dockerfile踩坑全纪录

1 构建失败:Java 版本不匹配
问题原因: Render 的默认 Java 版本与 Maven 项目要求不一致,项目需要 Java 17,但 Render 尝试使用 Java 21。
复制代码
[ERROR] Fatal error compiling: error: release version 21 not supported
  • 解决方案:修改 pom.xml,指定 Java 版本,添加或修改 <properties> 节点:

    <properties> <java.version>17</java.version> </properties>

Render 重新部署: Render 部署失败后,无法自动重试,不用删除服务

推送新代码 ->Render Dashboard → 选择项目 → Manual Deploy → Clear Build Cache & Deploy Latest Commit

2 Docker 构建失败:工作目录不存在

错误信息:原因: Dockerfile 中 COPY 命令指定的路径错误,或者未正确生成 .jar 文件。

复制代码
COPY failed: no source files were specified

3. Maven Wrapper 权限问题

问题描述:

  • 错误信息:

    复制代码
    ./mvnw: Permission denied
  • 原因: mvnw 文件在 Linux 容器中没有执行权限。

解决方案:

  1. 在本地赋予执行权限:

    复制代码
    chmod +x mvnw
    git add mvnw
    git commit -m "Add execute permission to mvnw"
    git push origin main
  2. 或在 Dockerfile 中添加:

    复制代码
    RUN chmod +x mvnw
总结
  • Maven 未找到? → 使用 Docker 部署

  • Java 版本错误? → 修改 pom.xml,指定 <java.version>17

  • Docker COPY 失败? → 确保 target/*.jar 文件存在,路径正确

  • Render 部署失败?Manual Deploy

  • Maven 权限问题?chmod +x mvnw

**推荐在Render构建时生成JAR**,而非手动上传本地JAR到GitHub。

**原因**:避免污染Git仓库(二进制文件不应纳入版本控制)。上传本地JAR无法保证JAR与代码同步,容易引发版本混乱。不符合CI/CD最佳实践。

总结关键步骤

步骤1:确保Dockerfile正确,据 `pom.xml` 中的JDK版本调整基础镜像(例如,若项目使用JDK17,需用 `maven:3.9.9-eclipse-temurin-17-focal`)。

步骤2:验证本地构建

  • 在本地测试Docker镜像生成:

```bash

cd F:\git_local\Tic-Tac-Toe\backend

docker build -t oxo-backend .

```

  • 确认镜像能正常运行:

```bash

docker run -p 8080:8080 oxo-backend

``·

步骤3:配置Render部署

  1. 在Render创建 **Web Service**,选择GitHub仓库。

  2. 指定Dockerfile路径为 `backend/Dockerfile`。

  3. 设置环境变量 `PORT`(Render会自动注入值)。

  4. 解决潜在问题

**问题1:JDK版本不匹配**

  • **现象**:Render构建失败,提示JDK版本错误。

  • **解决方案**:

  • 检查 `pom.xml` 中的 `<java.version>`。

  • 调整Dockerfile中的基础镜像版本,例如:

```dockerfile

FROM maven:3.9.9-eclipse-temurin-17-focal AS build # 使用JDK17

```

**问题2:依赖下载失败**

  • **现象**:Maven构建时无法下载依赖。

  • **解决方案**:

  • 在 `pom.xml` 中明确指定仓库地址(如阿里云镜像):

```xml

<repositories>

<repository>

<id>aliyun</id>

<url>https://maven.aliyun.com/repository/public\</url>

</repository>

</repositories>

```

  1. 最终目录与文件状态

```

Tic-Tac-Toe/

├── backend/

│ ├── src/ # 源代码

│ ├── pom.xml # 确保JDK版本配置正确

│ ├── Dockerfile # 多阶段构建配置 ✅

│ └── target/ # 本地构建生成,但.gitignore忽略 ✅

└── vue-demo/ # 前端项目(独立部署)

```

注意!!!!!!!一定一定要去docker hub的Tags页面自己查镜像

相关推荐
数据知道2 小时前
容器化部署:用Docker封装机器翻译模型与服务详解
docker·容器·机器翻译
IT毕设实战小研4 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
一只爱撸猫的程序猿5 小时前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
甄超锋5 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
武昌库里写JAVA8 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
敲上瘾8 小时前
Linux系统cgroups资源精细化控制基础
linux·测试工具·docker·压力测试·cgroups
Pitayafruit9 小时前
Spring AI 进阶之路03:集成RAG构建高效知识库
spring boot·后端·llm
zru_96029 小时前
Spring Boot 单元测试:@SpyBean 使用教程
spring boot·单元测试·log4j
甄超锋9 小时前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven
伊成10 小时前
Docker 部署 Nginx 完整指南
nginx·docker·容器