Careeroza
Project Setup
Two Separate Spring Boot Projects
Create two projects on start.spring.io (Spring Initializr): Maven, Java 17 or 21, Spring Boot 3.4.x. Each is a normal Spring Boot app with its own pom.xml, its own port and its own database.
| Project | Group / Artifact | Dependencies | Port |
|---|---|---|---|
| product-service | com.shopease / product-service | Spring Web, Spring Data JPA, H2 (or MySQL), Validation, Actuator | 8081 |
| order-service | com.shopease / order-service | Spring Web, Spring Data JPA, H2 (or PostgreSQL), Validation, Actuator | 8082 |
Folder Layout
shopease/
|-- product-service/
| |-- pom.xml
| |-- src/main/java/com/shopease/product/
| | |-- ProductServiceApplication.java
| | |-- Product.java (JPA entity)
| | |-- ProductRepository.java
| | |-- ProductController.java
| |-- src/main/resources/application.yml (port 8081, product_db)
|
|-- order-service/
|-- pom.xml
|-- src/main/java/com/shopease/order/
| |-- OrderServiceApplication.java
| |-- client/ProductClient.java (RestClient -> product-service)
| |-- Order.java, OrderItem.java
| |-- OrderController.java, OrderService.java
|-- src/main/resources/application.yml (port 8082, order_db)Note: Real teams usually keep each service in its own Git repository with its own pipeline. A single folder (or a Maven multi-module "mono-repo") is fine for learning.
pom.xml (product-service)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.5</version>
</parent>
<groupId>com.shopease</groupId>
<artifactId>product-service</artifactId>
<version>1.0.0</version>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>Tip: No Spring Cloud dependency is needed yet. Two plain Spring Boot apps talking over HTTP already are microservices. Spring Cloud adds discovery, gateway, config and resilience on top (next module and medium level).