为何我的Spring Web项目搭配Web与Thymeleaf依赖无法正常运行?
解决Spring Boot 2.0.1启动后自行关闭无法监听端口的问题
嘿,我来帮你排查这个问题!你遇到的是Spring Boot启动后直接退出的典型场景,通常是因为Web容器没被正确拉起,或者依赖、配置出了问题。咱们一步步来定位解决:
1. 确认启动类的配置是否正确
首先得保证你的启动类符合Spring Boot规范:
- 启动类上必须有
@SpringBootApplication注解,这个注解整合了自动配置、组件扫描和配置类的核心功能 - 启动类要放在根包路径下(比如你的项目核心代码在
com.yourname.springjokesapp包下,启动类就直接放在这个包里,这样Spring才能扫描到所有子包的组件)
给你个正确的启动类示例:
package com.yourname.springjokesapp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringJokesAppApplication { public static void main(String[] args) { SpringApplication.run(SpringJokesAppApplication.class, args); } }
2. 检查Maven依赖是否完整且正确
Spring Boot的Web starter是帮你自动引入Tomcat容器和Web相关依赖的核心,确保你的pom.xml里的依赖配置正确:
<dependencies> <!-- Spring Web核心依赖,内置Tomcat容器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Thymeleaf模板引擎依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- 可选:测试依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- 确保Spring Boot父依赖版本匹配 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- 从仓库拉取父依赖 --> </parent>
如果之前依赖下载可能存在缓存或缺失问题,执行以下命令强制刷新依赖:
mvn clean install -U
3. 获取完整日志定位问题根源
你提供的日志只到ApplicationContext刷新阶段,后面肯定有关键信息没展示——比如容器启动失败的原因、Bean初始化错误,或者Spring判断不需要启动Web容器的提示。
可以在src/main/resources/application.properties中开启DEBUG级别日志:
# 开启Spring框架的DEBUG日志 logging.level.org.springframework=DEBUG # 开启自定义项目包的DEBUG日志 logging.level.com.yourname.springjokesapp=DEBUG
重新启动项目后,就能看到更详细的启动流程,找到容器未启动就退出的具体原因——比如端口被占用、依赖缺失,或者配置类出错。
4. 排除自定义代码的干扰
如果以上步骤都没问题,那可能是你添加的自定义代码导致的。建议:
- 创建一个全新的空白Spring Boot项目,只引入Web和Thymeleaf依赖,直接启动验证是否能正常监听端口
- 如果空白项目能正常启动,再逐步添加你的代码(控制器、配置类等),每加一部分就启动一次,定位到导致问题的代码块
内容的提问来源于stack exchange,提问作者munkas09
相关产品推荐
相关产品推荐

