Spring Boot中如何分离REST API与Web应用?
单项目多模块 vs 独立双项目:你的Spring Boot场景最优解
一、优先选单项目多模块(适配你的当前需求)
你的场景下,多模块方案是更高效的选择,理由和优化建议如下:
- 核心优势:共享
core层代码,避免重复编写实体类、Repository、数据库配置;Maven多模块能统一管理依赖版本,调试时在IntelliJ里就能切换模块,打包部署也更便捷。 - 优化你的现有模块结构:
- core模块:作为纯Java库(
<packaging>jar</packaging>,无需Spring Boot启动类),存放所有共享资源:H2数据库配置、实体类(@Entity)、Repository接口、通用工具/校验方法。 - api模块:依赖core模块,仅包含RESTful控制器(
@RestController),专注返回JSON数据。配置独立的Spring Boot启动类,指定专属端口(如8081),仅引入Spring Web、Spring Data JPA等必要依赖。 - web模块:依赖core模块,仅包含Thymeleaf相关控制器(
@Controller),专注返回页面视图。配置独立的Spring Boot启动类,指定端口(如8080),引入Spring Web、Thymeleaf、Spring Data JPA依赖。
- core模块:作为纯Java库(
- 注意事项:两个启动类需配置不同的
server.port,避免端口冲突;父pom通过<dependencyManagement>统一锁定Spring Boot及各依赖版本,子模块无需重复声明版本号。
二、独立双项目的适用场景
只有当未来API与Web应用的业务逻辑完全拆分、需要独立扩容部署,或者分属不同团队维护时,才考虑拆成两个独立项目。当前阶段拆分反而会增加冗余:需要重复编写core层代码、配置两份数据库连接,调试时要启动两个项目,效率更低。
对你现有结构的调整建议
你当前的service模块命名易混淆,建议更名为api模块,明确其REST服务的定位;core和web模块保持职责不变即可。调整后模块职责清晰,后续维护和扩展更顺畅。
内容的提问来源于stack exchange,提问作者lecanardcolvert
相关产品推荐
相关产品推荐

