【问题标题】:How to debug a Spring Boot Web Application in STS?如何在 STS 中调试 Spring Boot Web 应用程序?
【发布时间】:2026-02-19 01:20:02
【问题描述】:

我是 Spring 框架的新手,所以我从 Spring Boot 项目开始。

特别是,我采用了https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-secure-jdbc 项目并修改了 pom.xml 以使其成为自包含(在 parent->artifactId 标记中将 spring-boot-samples 替换为 spring-boot-starter-parent,删除了属性节点,从http://docs.spring.io/spring-boot/docs/1.2.2.BUILD-SNAPSHOT/reference/htmlsingle/#getting-started-maven-installation添加到repositories和pluginRepositories中)。

我首先使用“mvn spring-boot:run”在 STS 之外成功构建并运行了这个应用程序,然后将 Maven 项目导入 STS,它在那里成功构建并运行。

我可以通过右键单击项目文件夹并选择 Run->Debug As ...->Spring Boot App 来调试此应用程序,并且调试器确实会在我在 ApplicationSecurity 类方法中设置的断点处停止。但是,浏览器窗口不会在 STS 和系统浏览器中自动弹出(我期望 - 这是正确的吗?)。

当我在 STS/Eclipse 中使用“内部 Web 浏览器”浏览到 localhost(端口 8080)时,HTML 页面会呈现出来,但我在 @RequestMapping("/") 方法中设置的断点不会被命中(我怀疑这可能是由于浏览器与调试器处于单独的进程中)。

那么,我如何在 STS 中调试 @RequestMapping 方法 - 这将有助于我更好地理解 Spring 框架。

我对 Eclipse/STS 的了解有限,所以我的安装会不会有问题?

【问题讨论】:

  • 你的应用有自己的main方法吗?
  • 是的,我可以在发布这个问题之前对其进行调试。

标签: maven debugging spring-mvc spring-boot spring-tool-suite


【解决方案1】:

您不需要使用嵌入式浏览器来调试服务器(浏览器是一个单独的进程)。如果您的 @RequestMapping 断点没有被命中,那么我怀疑 Spring 出于任何原因(可能是安全性?)没有调度到这些路由。

【讨论】:

  • 在注释掉 ... @Bean public ApplicationSecurity applicationSecurity() { return new ApplicationSecurity(); } ... 在与 @RequestMapping("/") 和 @RequestMapping("/foo") 关联的方法中遇到断点。那么,禁用安全性允许断点被击中?!但是在启用安全性的情况下,页面被正确呈现(将模型属性传递给视图),所以在我看来,这些映射方法被调用了——它是 WebSecurityConfigurerAdapter 隐藏调试器调用的一个特性吗?我不明白完全明白。谢谢。
  • 调试器是确定性的,不知道 spring 安全性。因此,如果调用了这些方法,您将遇到断点。没有看到你的代码就不可能说更多。
  • 复制步骤: 1. 单击github.com/spring-projects/spring-boot 处的“下载 ZIP”按钮 2. 将下载的文件解压缩到本地文件夹。 3. 打开 STS 4. File->Import ... 5. 在 Maven 下,选择“Existing Maven Projects”,单击 Next 6. 指向与此对应的“spring-boot-samples”文件夹:github.com/spring-projects/spring-boot/tree/master/… 例如C:\dev\java\maventest\spring-boot-master\spring-boot-samples 7. 我选择了所有(子)项目并单击 Finish ... 继续 ...
  • 8.等到后台进程导入并构建所有项目,这可能需要一些时间。 9. 在“spring-boot-sample-web-secure-jdbc”项目文件夹中,找到 (src/main/java) 并打开 SampleWebSecureCustomApplication.java。在 home() 和 foo() 方法(@RequestMapping 方法)中放置断点,并在启动方法之一中放置断点,比如 addViewControllers()。 10.右键点击'spring-boot-sample-web-secure-jdbc'项目​​文件夹,选择Debug As ...->Spring Boot App ...继续...
  • 11.确认 addViewControllers() 方法中的断点确实被命中,然后单击 Resume 继续执行。 12. 打开浏览器,浏览到localhost:8080 13. 登录页面呈现出来,但 home() 和 foo() 方法中的断点从未命中 - 为什么? 14. 停止调试器,注释掉@Bean public ApplicationSecurity applicationSecurity() { return new ApplicationSecurity(); }。重复上面的步骤 10 到 12,home() 和 foo() 方法中的断点就会被命中。 ...继续...
最近更新 更多