This project is a Spring Boot application using gRPC to
demonstrate CRUD operations on Car entities.
- Java 21
- Spring Boot (gRPC Server)
- gRPC Core
- H2 Database (in-memory)
- Lombok
- Maven
grpcplayground/
├── src/main/java/com/grpcplayground/grpcplayground/
│ ├── domain/ # Entity model (Car.java)
│ ├── repository/ # Spring Data JPA repository
│ ├── service/ # Service layer (CarService.java)
│ ├── grpc/ # gRPC implementation (CarGrpcService.java)
│ ├── controller/ # Optional REST testing endpoints
│ └── GrpcplaygroundApplication.java
├── src/main/proto/ # gRPC proto definitions
│ └── car.proto
├── src/main/resources/
│ ├── application.yml # App configuration
└── pom.xml # Maven dependencies- gRPC-based API for Car service.
- CRUD Unary RPC
CreateCar→ Membuat mobil baru.GetCarById→ Mengambil data mobil berdasarkan ID.ListCars→ Menampilkan semua data mobil.UpdateCar→ Memperbarui data mobil.DeleteCar→ Menghapus mobil berdasarkan ID.
- Server Streaming RPC
StreamCars→ Mengirim stream data mobil dari server ke client.
- Client Streaming RPC
BulkCreateCars→ Mengirim banyak mobil sekaligus dari client, server menyimpan lalu mengembalikan list hasil.
- Bidirectional Streaming RPC
CarChat→ Client dan server bisa saling mengirim pesan secara real-time.
- Uses H2 in-memory database.
git clone https://github.com/Ridhorezi/grpc-playground.git
cd grpc-playground./mvnw spring-boot:runThe gRPC server will start on port 8083 by default.
RPC: CreateCar
Example Request
{
"manufactur": "Toyota",
"model": "Avanza",
"type": "MPV"
}Example Response
{
"statusCode": 200,
"statusMessage": "SUCCESS",
"data": {
"id": "1",
"manufactur": "Toyota",
"model": "Avanza",
"type": "MPV",
"createdDate": {
"seconds": "1755806106",
"nanos": 960000000
}
}
}RPC: BulkCreateCar
Example Request (2 Cars at once)
{
"cars": [
{
"manufactur": "Toyota",
"model": "Avanza",
"type": "MPV"
},
{
"manufactur": "Honda",
"model": "Civic",
"type": "Sedan"
}
]
}Example Response
{
"statusCode": 200,
"statusMessage": "SUCCESS",
"data": [
{
"id": "1",
"manufactur": "Toyota",
"model": "Avanza",
"type": "MPV",
"createdDate": {
"seconds": "1755806106",
"nanos": 960000000
}
},
{
"id": "2",
"manufactur": "Honda",
"model": "Civic",
"type": "Sedan",
"createdDate": {
"seconds": "1755806112",
"nanos": 120000000
}
}
]
}The project uses H2 in-memory database.
You can access the H2 console at:
http://localhost:8080/h2-console
Default credentials: - JDBC URL: jdbc:h2:mem:test-db -
User: sa - Password: (empty)
This project is licensed under the MIT License.
Ridho Suhaebi Arrowi
Feel free to contribute or fork!