first commit

This commit is contained in:
zyh
2025-08-24 15:33:03 +08:00
commit be437a360d
54 changed files with 1273 additions and 0 deletions

62
README.md Normal file
View File

@@ -0,0 +1,62 @@
# Game Platform Server (Spring Boot WebFlux + MyBatis + MySQL)
A minimal backend scaffold using Spring Boot 3, WebFlux, MyBatis, and MySQL. Includes a sample `User` CRUD implemented via MyBatis (blocking JDBC) safely wrapped in reactive APIs.
## Tech Stack
- Spring Boot 3 (WebFlux, Actuator)
- MyBatis Spring Boot Starter (JDBC)
- MySQL Connector/J
- Java 17
## Blocking JDBC with WebFlux
MyBatis uses JDBC which is blocking. To keep WebFlux event loop non-blocking, all data access is offloaded to `Schedulers.boundedElastic()` (see `UserService`). This is a common and safe pattern when you need WebFlux endpoints but must use JDBC/MyBatis.
## Project Layout
- `pom.xml` Maven build, dependencies
- `src/main/resources/application.yml` datasource + mybatis config
- `src/main/resources/mapper/*.xml` MyBatis mappers (XML)
- `src/main/resources/schema.sql` initial table
- `src/main/java/com/gameplatform/server` application code
## Configure Database
1. Create database:
```sql
CREATE DATABASE game_platform CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```
2. Update `spring.datasource.*` in `application.yml` with your MySQL credentials.
3. Run the SQL init:
```sql
USE game_platform;
-- then execute contents of src/main/resources/schema.sql
```
## Build & Run
Requires JDK 17+ and Maven 3.9+.
```bash
mvn spring-boot:run
```
The app starts on `http://localhost:8080`.
## Endpoints
- `GET /actuator/health` health check
- `GET /api/users` list users
- `GET /api/users/{id}` get user by id
- `POST /api/users` create user
- body:
```json
{"username": "alice", "email": "alice@example.com"}
```
- `DELETE /api/users/{id}` delete user
## Notes
- If you need true end-to-end reactive IO, consider R2DBC instead of JDBC/MyBatis. Here we keep MyBatis for mapping convenience and use bounded elastic threads to avoid blocking the event loop.