不是必须,但绝大多数web服务离不开spring-boot-starter-web;不选则缺失嵌入式tomcat和servlet api支持,启动会报classnotfoundexception。

用 Spring Initializr 创建项目时,spring-boot-starter-web 必须选吗?
不是必须,但绝大多数 Web 服务离不开它。不选的话,默认连 Tomcat 嵌入式容器和 @RestController 支持都没有,写个接口会直接报 java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet。
常见错误现象:mvn spring-boot:run 启动失败,控制台刷出一堆 NoClassDefFoundError,根源常是漏选了 Web 相关 starter。
- 纯命令行工具或定时任务项目,可只选
spring-boot-starter(基础启动器)+spring-boot-starter-quartz等按需模块 - 想用 Jetty 或 Undertow 替换 Tomcat?先选上
spring-boot-starter-web,再排除spring-boot-starter-tomcat,再加对应 starter - Spring Boot 3.x 起默认使用 Jakarta EE 9+ 命名空间,
javax.*包已全部换成jakarta.*,老教程里的javax.servlet导包会编译失败
application.properties 和 application.yml 选哪个?
功能完全等价,选哪个取决于团队习惯和配置复杂度。YAML 对嵌套结构(如多数据源、日志级别分层)更清晰,但缩进敏感;Properties 更直白,IDE 支持更稳,尤其在 CI/CD 中解析容错更强。
容易踩的坑:application.yml 里用 Tab 缩进会触发 while scanning for the next token found character '\t' 错误——YAML 只认空格,且层级间空格数必须一致。
立即学习“Java免费学习笔记(深入)”;
- 新手建议从
application.properties入手,比如写server.port=8081比写server:\n port: 8081少踩一半坑 - 如果要用 profile 多环境(dev/test/prod),YAML 的
spring.profiles.active+---\nspring:\n config:\n activate:\n on-profile: dev写法更紧凑 - 所有配置项最终都会映射到
@ConfigurationProperties类,所以无论用哪种格式,键名大小写和点号分隔规则都一样,例如logging.level.com.example=DEBUG
Maven 依赖里为什么总出现 spring-boot-starter-parent?
它不是“必须继承”的父 POM,而是提供三样东西:统一的依赖版本管理(避免手动配 spring-web 和 spring-context 版本冲突)、预设插件配置(比如 spring-boot-maven-plugin 打可执行 jar)、以及默认资源过滤规则。
如果你在公司私有 Maven 仓库里已有自己的 parent,又不想丢掉 Spring Boot 的依赖管理,可以改用 spring-boot-dependencies 作为 <dependencymanagement></dependencymanagement> 的 import scope。
- 直接删掉
spring-boot-starter-parent会导致mvn compile报错找不到spring-boot-maven-plugin,因为插件没声明 - Spring Boot 3.2+ 推荐用
<scope>import</scope>方式复用依赖管理,比继承更灵活,也避免 parent 覆盖你原有的<properties></properties> - 注意
spring-boot-starter-parent的版本号(如3.3.0)决定了你用的 Spring Framework、Jackson、Tomcat 等底层组件版本,别随便降级
第一次运行 mvn spring-boot:run 卡住或报错怎么办?
大概率是本地 Maven 镜像源慢或网络策略拦截,而不是代码问题。Spring Initializr 生成的项目本身不含业务逻辑,能编译通过就说明骨架没问题。
典型表现:控制台停在 [INFO] Attaching agents: [] 几分钟不动,或者抛出 Connection refused 连不上 repo.maven.apache.org。
- 先执行
mvn clean compile -X(-X 开启 debug 日志),看卡在哪一步——通常卡在下载spring-boot-dependencies的 pom 文件 - 检查
~/.m2/settings.xml是否配置了可用镜像,阿里云地址是https://maven.aliyun.com/repository/public - 如果公司内网禁外网,确认是否需要代理:Maven 不读系统 HTTP_PROXY,得在
settings.xml里显式配<proxy></proxy>标签 - Windows 下路径含中文或空格,可能触发
java.io.FileNotFoundException,把项目移到C:/dev/demo这类干净路径再试
真正麻烦的是 JDK 版本错配——Spring Boot 3.x 强制要求 JDK 17+,但 mvn -v 显示的 Java 版本和 JAVA_HOME 指向的 JDK 往往不一致,这个点最容易被忽略。










