Skip to content

Ridhorezi/Spring-gRPC-Playground

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

Spring Boot gRPC Playground

This project is a Spring Boot application using gRPC to demonstrate CRUD operations on Car entities.

🛠 Tech Stack

  • Java 21
  • Spring Boot (gRPC Server)
  • gRPC Core
  • H2 Database (in-memory)
  • Lombok
  • Maven

📦 Project Structure

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

📌 Features

  • gRPC-based API for Car service.
  1. 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.
  2. Server Streaming RPC
    • StreamCars → Mengirim stream data mobil dari server ke client.
  3. Client Streaming RPC
    • BulkCreateCars → Mengirim banyak mobil sekaligus dari client, server menyimpan lalu mengembalikan list hasil.
  4. Bidirectional Streaming RPC
    • CarChat → Client dan server bisa saling mengirim pesan secara real-time.
  • Uses H2 in-memory database.

🚀 How to Run the Project

1. Clone the repository

git clone https://github.com/Ridhorezi/grpc-playground.git
cd grpc-playground

2. Build and run

./mvnw spring-boot:run

The gRPC server will start on port 8083 by default.


📡 gRPC Endpoints

Create Car

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
    }
  }
}

Bulk Create Cars

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
      }
    }
  ]
}

🗄 Database

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)


📜 License

This project is licensed under the MIT License.

✍️ Author

Ridho Suhaebi Arrowi
Feel free to contribute or fork!

About

Spring Boot gRPC Playground

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages