大家好,最近在多个 Spring Boot 项目中踩了不少坑,整理了一份高频问题和解决方案,分享给正在用 Spring Boot 的小伙伴,也欢迎大家补充自己的踩坑经验~
🔧 一、配置与启动类常见问题
-
@SpringBootApplication 扫描范围问题
- 坑:启动类不在根包,导致 Controller/Service 无法被扫描注入
- 解:用
@ComponentScan(basePackages = "xxx.xxx")手动指定扫描路径,或把启动类移到最外层包
-
application.yml 配置不生效
- 坑:缩进格式错误、键名拼写错(比如
server-port写成server_port) - 解:用 IDE 格式化 YAML,检查
spring.profiles.active是否激活了正确环境
- 坑:缩进格式错误、键名拼写错(比如
⚙️ 二、Web 接口与数据交互
-
跨域 CORS 配置失效
- 坑:只加了
@CrossOrigin但网关 / 过滤器又拦截了,或者全局配置没写对 - 解:推荐写一个
WebMvcConfigurer实现类,用addCorsMappings全局配置跨域
- 坑:只加了
-
参数校验不生效(@Valid / @Validated)
- 坑:没引入
spring-boot-starter-validation,或者 Controller 层没加@Valid - 解:引入依赖 + 在接口参数前加
@Valid,配合BindingResult接收校验错误
- 坑:没引入
📊 三、数据库与 ORM
-
MyBatis-Plus 分页插件不生效
- 坑:没配置
MybatisPlusInterceptor,或者分页参数传错 - 解:注册分页拦截器 Bean,查询时用
Page<T>接收参数
- 坑:没配置
-
事务不回滚
- 坑:
@Transactional加在 private 方法、捕获了异常没抛出、或者用了 try-catch 吞了异常 - 解:确保方法是 public,异常抛出到事务切面,必要时用
rollbackFor = Exception.class
- 坑:
🚀 四、性能与部署
-
Tomcat 线程池配置不合理导致接口超时
-
坑:默认线程数太少,高并发下请求排队
-
解:在
application.yml中配置:yaml
server: tomcat: threads: max: 200 min-spare: 20
-
-
JVM 参数没调优,内存溢出 / GC 频繁
-
坑:上线时用默认 JVM 参数,大流量下 OOM
-
解:根据机器内存配置
-Xms/-Xmx,推荐用G1回收器:plaintext
-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200
-
-
Docker 容器化时区问题
-
坑:容器时间和宿主机不一致,日志时间错乱
-
解:在 Dockerfile 里加:
dockerfile
ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
-
-
日志级别配置混乱,线上日志刷屏
* 坑:开发环境用 DEBUG,上线后没改成 INFO,日志文件爆炸
* 解:用 `logging.level.root=INFO`,关键业务包单独配置 `logging.level.xxx.xxx=DEBUG`
分享主题:
城市:




