很多开发者用 Spring Initializr 生成项目后,就迫不及待地开始写业务代码,结果项目越写越臃肿,后期维护成本极高。其实从零搭建时,有五个细节如果提前注意,能省下大量重构时间。这些都是我踩过坑之后总结出来的经验,希望对你有用。
细节一:锁定依赖版本,别让 Maven 帮你“自动升级”
Spring Boot 的依赖管理很方便,但前提是你得用对。最常见的问题是不指定版本,导致不同模块引入的同一个库版本不一致,运行时出现NoSuchMethodError。正确做法是让父工程继承spring-boot-starter-parent,或者导入spring-boot-dependencies的 BOM:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.5</version> </parent>
这样所有 starter 的版本都由 Spring Boot 统一管理。如果确实需要覆盖某个依赖,务必在dependencyManagement中显式声明版本,并定期用mvn dependency:tree检查冲突。另外,Java 版本也要和 Spring Boot 版本匹配——Spring Boot 3.x 要求 Java 17 起步,别再用 Java 8 硬撑了。
细节二:包结构按功能划分,而不是按技术分层
controller、service、dao这种技术分层在小型项目里没问题,但一旦模块增多,每个包下都会堆满几十个类,找个文件都要翻半天。更合理的做法是按业务功能划分,比如:
com.example.demo ├── order │ ├── OrderController.java │ ├── OrderService.java │ └── OrderRepository.java ├── user │ ├── UserController.java │ └── UserService.java └── DemoApplication.java
每个模块内部再按需分层。同时,启动类一定要放在根包下,这样@SpringBootApplication的组件扫描才能覆盖所有子包。如果启动类放错位置,你会遇到“Bean 找不到”的经典错误。
细节三:多环境配置与敏感信息隔离
开发、测试、生产环境的数据库地址、Redis 密码都不一样。如果全写在一个application.yml里,每次部署都要手动改,迟早出事。正确做法是利用 Profile:
application.yml放公共配置
application-dev.yml、application-prod.yml放环境相关配置
通过spring.profiles.active=dev激活
敏感信息(数据库密码、API Key)不要明文写在配置文件里,可以用环境变量或配置中心。另外,推荐用@ConfigurationProperties批量绑定配置,而不是到处散落@Value,这样类型安全,也便于管理。
细节四:全局异常处理与统一响应格式
如果没有全局异常处理,Controller 里就会充斥try-catch,前端收到的错误格式也五花八门。用@RestControllerAdvice可以一劳永逸:
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(BusinessException.class) public Result<Void> handleBusiness(BusinessException e) { return Result.fail(e.getCode(), e.getMessage()); } @ExceptionHandler(Exception.class) public Result<Void> handleUnknown(Exception e) { log.error("系统异常", e); return Result.fail(500, "系统繁忙,请稍后重试"); } }同时定义一个统一的Result<T>响应体,包含code、message、data。业务异常继承RuntimeException,系统异常不要暴露堆栈给前端,只记录日志即可。
细节五:日志规范与 Actuator 监控
System.out.println是生产环境的大忌。用 SLF4J + Logback,按级别输出,生产环境用 INFO,排查问题时临时调 DEBUG。日志文件要配置滚动策略,避免磁盘被打满:
logging: file: name: logs/app.log logback: rollingpolicy: max-file-size: 100MB max-history: 30
另外,引入spring-boot-starter-actuator,可以免费获得健康检查、指标监控、线程 dump 等能力。生产环境只暴露health、info、metrics即可,env、beans这些敏感端点千万别开。
总结
这五个细节看似基础,却决定了项目能否健康成长。依赖版本乱、包结构差、配置散、异常处理缺失、日志不规范——每一个都会在项目变大后变成噩梦。从零搭建时多花半小时规划,后期能省下无数加班时间。记住:好的开始是成功的一半,而 Spring Boot 项目的好开始,就藏在这些细节里。