运行你的应用程序
将应用程序打包为 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 命令来运行:
$ java -jar target/myapplication-0.0.1-SNAPSHOT.jar远程调试支持
运行打包应用时,也可以开启远程调试支持,方便连接调试器:
$ java -agentlib:jdwp=server=y,transport=dt_socket,address=8000,suspend=n \
-jar target/myapplication-0.0.1-SNAPSHOT.jar3. 使用 Maven 插件运行
Spring Boot Maven 插件包含一个 run 目标,可以快速编译并运行应用。应用以解压后的形式运行,与在 IDE 中的运行方式类似:
$ mvn spring-boot:run你也可以利用 MAVEN_OPTS 环境变量来配置 JVM 参数: export MAVEN_OPTS=-Xmx1024m
4. 使用 Gradle 插件运行
Spring Boot Gradle 插件包含 bootRun 任务。当你应用了 org.springframework.boot 和 java 插件时,该任务会自动添加:
$ 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。