first commit
This commit is contained in:
62
README.md
Normal file
62
README.md
Normal 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.
|
||||
|
||||
Reference in New Issue
Block a user