分享Spring Boot 实战避坑指南:从配置到部署的 10 个高频问题总结

头像
张一帆
20阅读0评论

大家好,最近在多个 Spring Boot 项目中踩了不少坑,整理了一份高频问题和解决方案,分享给正在用 Spring Boot 的小伙伴,也欢迎大家补充自己的踩坑经验~

🔧 一、配置与启动类常见问题

  1. @SpringBootApplication 扫描范围问题

    • 坑:启动类不在根包,导致 Controller/Service 无法被扫描注入
    • 解:用 @ComponentScan(basePackages = "xxx.xxx") 手动指定扫描路径,或把启动类移到最外层包
  2. application.yml 配置不生效

    • 坑:缩进格式错误、键名拼写错(比如 server-port 写成 server_port
    • 解:用 IDE 格式化 YAML,检查 spring.profiles.active 是否激活了正确环境

⚙️ 二、Web 接口与数据交互

  1. 跨域 CORS 配置失效

    • 坑:只加了 @CrossOrigin 但网关 / 过滤器又拦截了,或者全局配置没写对
    • 解:推荐写一个 WebMvcConfigurer 实现类,用 addCorsMappings 全局配置跨域
  2. 参数校验不生效(@Valid / @Validated)

    • 坑:没引入 spring-boot-starter-validation,或者 Controller 层没加 @Valid
    • 解:引入依赖 + 在接口参数前加 @Valid,配合 BindingResult 接收校验错误

📊 三、数据库与 ORM

  1. MyBatis-Plus 分页插件不生效

    • 坑:没配置 MybatisPlusInterceptor,或者分页参数传错
    • 解:注册分页拦截器 Bean,查询时用 Page<T> 接收参数
  2. 事务不回滚

    • 坑:@Transactional 加在 private 方法、捕获了异常没抛出、或者用了 try-catch 吞了异常
    • 解:确保方法是 public,异常抛出到事务切面,必要时用 rollbackFor = Exception.class

🚀 四、性能与部署

  1. Tomcat 线程池配置不合理导致接口超时

    • 坑:默认线程数太少,高并发下请求排队

    • 解:在 application.yml 中配置:

      yaml

      server:
        tomcat:
          threads:
            max: 200
            min-spare: 20
      
  2. JVM 参数没调优,内存溢出 / GC 频繁

    • 坑:上线时用默认 JVM 参数,大流量下 OOM

    • 解:根据机器内存配置 -Xms/-Xmx,推荐用 G1 回收器:

      plaintext

      -Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200
      
  3. Docker 容器化时区问题

    • 坑:容器时间和宿主机不一致,日志时间错乱

    • 解:在 Dockerfile 里加:

      dockerfile

      ENV TZ=Asia/Shanghai
      RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
      
  4. 日志级别配置混乱,线上日志刷屏

*   坑:开发环境用 DEBUG,上线后没改成 INFO,日志文件爆炸
*   解:用 `logging.level.root=INFO`,关键业务包单独配置 `logging.level.xxx.xxx=DEBUG`
分享主题:
城市:
收藏
举报
精选评论
empty
暂无数据
版块详情

分享

2k 帖子
8k 评论
147 关注
欢迎分享个人工作经历、职场观点、生活体验等
版主
空缺中,申请版主请于站长联系
远程全职推荐

扫码下载应用

下载APP以便及时收到回复或进展