Spring Boot 通过约定优于配置、自动装配和起步依赖降低初始化成本,但不提供 CRUD 生成器;需注意内嵌容器配置、主类包路径、数据库选型(JPA/MyBatis)、Jackson 中文与日期序列化配置,以及多 starter 间自动配置冲突问题。

Spring Boot 本身不是“快速开发框架”的封装品,而是通过约定优于配置、自动装配和起步依赖(Starter)大幅降低 Spring 应用的初始化成本。它不提供 CRUD 代码生成器或可视化建模工具,所谓“快速开发”取决于你如何组合它与实际技术栈。
用 spring-boot-starter-web 启动一个可运行的 Web 服务
这是最基础但最容易出问题的一步:很多新手以为加了依赖就能跑,却忽略内嵌容器和主类约束。
-
spring-boot-starter-web默认拉入tomcat-embed-core,不需要额外部署 WAR;若想换 Jetty,需排除 Tomcat 并引入spring-boot-starter-jetty - 主启动类必须在默认包或其子包下,否则
@ComponentScan扫不到自定义@Service或@Repository - 启动失败常见报错如
Port already in use,可改server.port=8081在application.properties中指定
数据库操作别只靠 JdbcTemplate 硬写 SQL
虽然 JdbcTemplate 轻量、无代理、适合简单查询,但一旦涉及关联、分页、动态条件,硬拼 SQL + Map 结果会迅速失控。
- 优先考虑
spring-boot-starter-data-jpa+Hibernate,尤其当实体关系明确、需要二级缓存或审计字段(@CreatedDate)时 - 若用 MyBatis,务必引入
mybatis-spring-boot-starter(非官方mybatis-spring),否则@MapperScan不生效 -
JpaRepository的findAll(Specification)比手写 DAO 更易扩展动态查询,但需搭配spring-boot-starter-data-jpa的spring.jpa.hibernate.ddl-auto=none避免误删表
@RestController 返回 JSON 时中文乱码或日期格式不对
这不是 Spring Boot 的 bug,而是 Jackson 默认配置与本地习惯不一致导致的典型现象。
立即学习“Java免费学习笔记(深入)”;
- 中文乱码多因响应头缺失
Content-Type: application/json;charset=UTF-8,可在application.properties加spring.http.encoding.charset=UTF-8(旧版)或server.servlet.encoding.charset=UTF-8(2.4+) - 日期返回成时间戳?Jackson 默认序列化
java.time.LocalDateTime为 long。加@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")到字段,或全局配置spring.jackson.date-format=yyyy-MM-dd HH:mm:ss和spring.jackson.serialization.write-dates-as-timestamps=false - 空字段不输出?加
@JsonInclude(JsonInclude.Include.NON_NULL)到类上,比在每个字段加@JsonIgnore更可控
真正卡住项目的往往不是“怎么启动”,而是“怎么让不同模块的自动配置不打架”——比如同时引入 spring-boot-starter-cache 和 spring-boot-starter-data-redis 时,RedisCacheConfiguration 可能覆盖掉你自定义的 CacheManager bean,这种隐式覆盖很难 debug。










