Spring Boot + 多模块架构
原创
©著作权归作者所有:来自51CTO博客作者wx661607c93692e的原创作品,请联系作者获取转载授权,否则将追究法律责任
实战:构建一个“可组合”的电商系统骨架
步骤 1:项目结构设计
ecommerce-platform/ # 根项目
├── pom.xml # 父 POM,定义依赖版本 (BOM)
├── auth-starter/ # 认证 Starter
│ ├── pom.xml
│ └── src/main/java/com/platform/auth
├── logging-starter/ # 日志脱敏 Starter
│ ├── pom.xml
│ └── src/main/java/com/platform/logging
├── common-util/ # 通用工具模块
│ ├── pom.xml
│ └── src/main/java/com/platform/util
├── order-module/ # 订单业务模块
│ ├── pom.xml
│ └── src/main/java/com/platform/order
├── payment-module/ # 支付业务模块
│ ├── pom.xml
│ └── src/main/java/com/platform/payment
├── monolith-app/ # 单体应用 (组合所有模块)
│ ├── pom.xml
│ └── src/main/java/com/platform/monolith
└── payment-service/ # 支付微服务 (仅包含 payment-module)
├── pom.xml
└── src/main/java/com/platform/payment_service
步骤 2:定义 BOM (父 POM)
<!-- ecommerce-platform/pom.xml -->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.platform</groupId>
<artifactId>ecommerce-platform</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<!-- 定义统一依赖版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.3.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.platform</groupId>
<artifactId>auth-starter</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.platform</groupId>
<artifactId>logging-starter</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 其他模块... -->
</dependencies>
</dependencyManagement>
</project>
步骤 3:构建可复用的 Starter
示例:auth-starter
// AuthAutoConfiguration.java
@Configuration
@EnableConfigurationProperties(AuthProperties.class)
@ConditionalOnClass(Security.class)
public class AuthAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public AuthService authService(AuthProperties properties) {
return new DefaultAuthService(properties);
}
}
// AuthProperties.java
@ConfigurationProperties("platform.auth")
public class AuthProperties {
private String jwtSecret = "default-secret";
// getter/setter
}
# 在使用方 application.yml 中只需:
platform:
auth:
jwt-secret: your-secret-key
步骤 4:业务模块化(order-module)
// OrderModuleConfig.java
@Configuration
@Import(AuthAutoConfiguration.class) // 依赖 auth-starter
public class OrderModuleConfig {
// 定义订单模块的 Beans
}
// OrderService.java
@Service
@RequiredArgsConstructor
public class OrderService {
private final AuthService authService; // 自动注入
private final OrderRepository repository;
// 业务逻辑...
}