本文展示了如何使用 VS Code 和 Docker 从零开始实现 Spring Boot 的 HelloWorld 项目。

准备工作

软件环境

请确保电脑上已安装 Docker Desktop、VS Code 已安装 Docker 和 Dev Container 插件。

构建 Docker 镜像和容器

在项目根目录下创建以下 Dockerfile 文件用于构建支持 Spring Boot 开发的 Docker 镜像:

FROM maven:3.8.5-openjdk-17
VOLUME /hellospringboot
WORKDIR /hellospringboot
CMD tail -f /dev/null

之后根目录下打开终端依次输入以下命令构建镜像和容器:

docker build -t maven:3.8.5-openjdk-17 .
docker run -d -v "$(pwd):/hellospringboot" --name hellospringboot maven:3.8.5-openjdk-17

此时,我们已准备好一个带有 jdk 和 Maven 的容器化开发环境,接下来就可以开始开发项目了。

构建 Spring Boot 项目

官网生成项目

可以到 https://start.spring.io/ 生成一个 Spring Boot 项目,各选项可参考如下设置:

Project - Maven
Language - Java
Spring Boot - 3.2.0
Project Metadata
    Group - com.example
    Artifact - hellospringboot
    Name - hellospringboot
    Description - Demo project for Spring Boot
    Package name - com.example.hellospringboot
    Packaging - jar
    Java - 17

创建时可在 Dependencies 处添加 Spring Web 依赖,也可之后在 pom.xml 里手动添加以下代码:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

使用 VS Code 进行容器化开发

请注意,并不能在之前写 Dockerfile 的 VS Code 界面进行开发,因为那只是主机中的文件夹,没有相关依赖。请按以下步骤打开容器中开发环境:

  • 在左侧 Docker 标签页可查看已有的容器和镜像;
  • 检查希望运行的容器左侧图标,正方形表示已停止,三角形表示正在运行;若已停止,右键点击 Start,之后再右键选择“附加 Visual Studio Code”即可远程连接容器内的文件系统;
  • 在“文件”菜单选择“打开文件夹”,选择打开 hellospringboot 目录,即可进入工程开发;

编写核心服务

hellospringboot/src/main/java/com/example/hellospringboot 下创建 controller 文件夹,再在其中创建 HelloSpringBoot.java,其内容如下:

package com.example.hellospringboot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloSpringBoot {
    @RequestMapping("/")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

Spring Boot 热部署

pom.xml 中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

这样,在进行代码更改时就无需重启应用程序。

运行项目

进入 hellospringboot/src/main/java/com/example/hellospringboot/HellospringbootApplication.java,点击 run 按钮,等待片刻即可从浏览器 http://localhost:8080/ 地址处访问该服务。若发现 8080 端口被占用,可在 hellospringboot/src/main/resources/application.properties 中修改端口,例如:

server.port=8999

最终的项目文件结构如下:

hellospringboot
│
│  .gitignore
│  Dockerfile
│  HELP.md
│  mvnw
│  mvnw.cmd
│  pom.xml
│
├─.mvn
│  └─wrapper
│          maven-wrapper.jar
│          maven-wrapper.properties
│
├─.vscode
│      settings.json
│
├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │      └─example
│  │  │          └─hellospringboot
│  │  │              │  HellospringbootApplication.java
│  │  │              │
│  │  │              └─controller
│  │  │                      HelloSpringBoot.java
│  │  │
│  │  └─resources
│  │          application.properties
│  │
│  └─test
│      └─java
│          └─com
│              └─example
│                  └─hellospringboot
│                          HellospringbootApplicationTests.java
│
└─target
    ├─classes
    │  │  application.properties
    │  │
    │  └─com
    │      └─example
    │          └─hellospringboot
    │              │  HellospringbootApplication.class
    │              │
    │              └─controller
    │                      HelloSpringBoot.class
    │
    └─test-classes
        └─com
            └─example
                └─hellospringboot
                        HellospringbootApplicationTests.class