Files
game_server/README.md
2025-08-24 15:33:03 +08:00

63 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.