# transaction-demo **Repository Path**: lx_Linlx-0628/transaction-demo ## Basic Information - **Project Name**: transaction-demo - **Description**: 测试事务Demo - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-04 - **Last Updated**: 2025-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Boot 事务嵌套演示项目 这个项目演示了Spring Boot中事务的多重嵌套使用场景,包括不同的传播行为(Propagation)和隔离级别(Isolation)。 ## 项目结构 ``` transaction-demo/ ├── src/main/java/com/example/transaction/ │ ├── controller/ # REST API控制器 │ ├── model/ # 实体类 │ ├── repository/ # 数据访问层 │ ├── service/ # 业务逻辑层 │ │ └── impl/ # 服务实现 │ ├── config/ # 配置类 │ └── TransactionDemoApplication.java # 应用入口 └── src/main/resources/ └── application.properties # 应用配置 ``` ## 功能特性 1. **账户管理**:创建账户、查询账户、存款、取款 2. **转账操作**:单笔转账、批量转账 3. **事务嵌套**:演示不同传播行为的事务嵌套 4. **事务回滚**:演示事务回滚机制 ## 事务演示场景 1. **简单转账(REQUIRED传播)**:从一个账户转账到另一个账户,演示基本事务 2. **批量转账(REQUIRES_NEW嵌套)**:批量执行多个转账操作,每个子转账在独立事务中执行 3. **异常处理与回滚**:演示异常情况下的事务回滚 ## 如何运行 ### 前提条件 - Java 11或更高版本 - Maven 3.6或更高版本 ### 启动应用 ```bash # 编译项目 mvn clean package # 运行应用 java -jar target/transaction-demo-0.0.1-SNAPSHOT.jar ``` ### 运行演示 启动应用后,可以通过以下方式测试事务功能: 1. **使用REST API**: - 通过Postman或curl调用REST API - API文档见下方 2. **运行演示模式**: - 使用演示配置文件启动:`java -jar target/transaction-demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=demo` - 查看控制台输出,了解事务执行情况 ## REST API ### 账户API - `POST /api/accounts` - 创建账户 - `GET /api/accounts` - 获取所有账户 - `GET /api/accounts/{accountNumber}` - 获取指定账户 - `POST /api/accounts/{accountNumber}/deposit` - 存款 - `POST /api/accounts/{accountNumber}/withdraw` - 取款 - `POST /api/accounts/transfer` - 转账 - `POST /api/accounts/batch-transfer` - 批量转账 ### 交易记录API - `GET /api/transactions` - 获取所有交易记录 - `GET /api/transactions/{transactionId}` - 获取指定交易记录 - `GET /api/transactions/account/{accountNumber}` - 获取指定账户的交易记录 ## 事务传播行为说明 本项目演示了以下事务传播行为: - **REQUIRED**:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 - **REQUIRES_NEW**:创建一个新的事务,如果当前存在事务,则挂起当前事务。 ## 数据库 项目使用H2内存数据库,可以通过以下URL访问H2控制台: ``` http://localhost:8080/h2-console ``` 连接信息: - JDBC URL: `jdbc:h2:mem:testdb` - 用户名: `sa` - 密码: (空) ## 注意事项 - 本项目仅用于演示目的,不建议在生产环境中使用 - 项目启动时会自动创建测试账户数据