项目骨架:用Spring Initializr起步
别手动建Maven工程再一个个加依赖。Spring Initializr()是官方脚手架,选好Java版本、构建工具、SpringBoot版本,勾上Web、Lombok、数据库驱动,点生成,一个标准项目结构就下来了。这一步省掉的不仅是时间,更是避免版本不兼容的隐患。古人说,工欲善其事,必先利其器。Initializr就是那把利器。骨架不对,后面怎么长都是歪的。
依赖管理:Maven还是Gradle,选一个别反复横跳
Maven胜在稳定、生态成熟、团队上手快。Gradle胜在构建速度、灵活脚本。新手建议Maven,因为绝大多数教程和解决方案都基于Maven,遇到问题一搜就有答案。依赖版本交给SpringBoot的spring-boot-starter-parent统一管理,不要自己乱指定版本。版本冲突是SpringBoot项目最常见的翻车原因,让父POM管版本,你只管用,别逞能。
配置文件:application.yml不是垃圾桶
很多人的application.yml从数据库连接写到日志级别,再写到第三方密钥,几百行堆在一起。正确做法是拆:通用配置放application.yml,环境差异放application-dev.yml、application-prod.yml。敏感信息用环境变量注入,永远不要提交到Git。spring.profiles.active决定激活哪套。配置乱放,等于把钥匙藏在门垫下面,迟早出事。
分层架构:Controller不是业务逻辑的收容所
见过太多Controller里直接写SQL、算价格、发消息。这是典型的“一锅炖”。标准分三层:Controller只负责接收参数、校验、返回结果;Service承载业务逻辑;Repository/DAO只管数据存取。每层只做自己该做的事,代码才可测、可维护。Controller越薄,项目越稳。俗语说,各司其职,各安其位。乱了规矩,系统就成了一团乱麻。
数据库集成:JPA和MyBatis,别既要又要
选JPA就用Repository接口,复杂查询用@Query或QueryDSL。选MyBatis就用Mapper接口加XML或注解。最怕的是两个混用,同一张表有的地方用JPA,有的地方用MyBatis,事务边界模糊,缓存各管各的。一套数据访问方案,一条路走到黑。集成时先配好连接池(HikariCP默认就很好),设好spring.datasource.hikari.maximum-pool-size,别让默认值在压测时把你坑哭。
测试与打包:不写测试的代码等于没写完
至少写两类测试:单元测试用JUnit 5 + Mockito,不启动Spring容器;集成测试用@SpringBootTest,验证Controller到数据库的完整链路。打包用mvn clean package或gradle bootJar,生成可执行Jar,java -jar直接跑。Docker部署就写个Dockerfile,基础镜像用eclipse-temurin:17-jre-alpine,体积小、启动快。没经过测试和打包验证的项目,不叫完成,叫半成品。
六步走完,项目才算真正立起来。每一步都不复杂,但每一步都有人偷懒。偷懒的代价,是上线前夜通宵排查,是生产环境一个配置错误导致全站不可用。慢就是快,少就是多。把地基打扎实,后面加功能、扩并发、上微服务,都是水到渠成的事。