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