Skip to content

运行你的应用程序

将应用程序打包为 JAR 并使用嵌入式 HTTP 服务器的最大优势之一是:你可以像运行任何其他普通 Java 程序一样运行你的应用。调试 Spring Boot 应用也是如此,你不需要任何特殊的 IDE 插件或扩展。

::: note 注意 下文所述的选项最适合用于开发的本地运行。有关生产环境的部署,请参阅为生产环境打包。 :::

1. 从 IDE 运行

你可以直接在 IDE 中将 Spring Boot 应用作为 Java 应用程序运行。在此之前,你需要先导入项目:

  • 主流 IDE:大多数 IDE(如 IntelliJ IDEA, Eclipse, VS Code)都能直接导入 Maven 或 Gradle 项目。
  • 注意事项:如果你不小心同时运行了两次 Web 应用,会看到“端口已被占用”的错误。

2. 作为打包后的应用运行

如果你使用 Spring Boot 的 Maven 或 Gradle 插件创建了可执行 JAR,你可以使用标准的 java -jar 命令来运行:

shell
$ java -jar target/myapplication-0.0.1-SNAPSHOT.jar

远程调试支持

运行打包应用时,也可以开启远程调试支持,方便连接调试器:

shell
$ java -agentlib:jdwp=server=y,transport=dt_socket,address=8000,suspend=n \
       -jar target/myapplication-0.0.1-SNAPSHOT.jar

3. 使用 Maven 插件运行

Spring Boot Maven 插件包含一个 run 目标,可以快速编译并运行应用。应用以解压后的形式运行,与在 IDE 中的运行方式类似:

shell
$ mvn spring-boot:run

你也可以利用 MAVEN_OPTS 环境变量来配置 JVM 参数: export MAVEN_OPTS=-Xmx1024m

4. 使用 Gradle 插件运行

Spring Boot Gradle 插件包含 bootRun 任务。当你应用了 org.springframework.bootjava 插件时,该任务会自动添加:

shell
$ gradle bootRun

同样可以使用 JAVA_OPTS 配置环境: export JAVA_OPTS=-Xmx1024m

5. 热交换 (Hot Swapping)

由于 Spring Boot 应用是标准的 Java 应用,JVM 的热交换(Hot-swapping)开箱即用。不过 JVM 热交换在可替换的字节码方面有一定限制。

  • 进阶方案:如果需要更完整的重载功能,可以使用 JRebel
  • 官方方案spring-boot-devtools 模块也支持快速应用重启。

补充教学

1. 为什么推荐 java -jar 而不是解压运行?

java -jar 能够保证运行环境与构建产物的高度一致性。Spring Boot 的 Loader 机制会自动处理嵌套 JAR 的加载逻辑。在 Docker 容器化时代,java -jar 是最标准、最简洁的启动入口。

2. 内存调优建议

运行 Spring Boot 应用时,建议通过 -Xms-Xmx 明确指定堆内存大小。对于微服务,通常建议将这两个值设为相等,以减少 JVM 频繁申请和释放内存带来的开销。

3. 如何优雅停止应用?

在控制台运行程序时,按下 Ctrl+C 即可发送 SIGINT 信号。Spring Boot 会触发“优雅停机”逻辑:不再接受新请求,等待处理中的请求完成后再关闭上下文。如果你使用脚本启动,则应使用 kill -15 <pid>(SIGTERM)而非 kill -9

Based on Spring Framework.