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.

ProjectGroup / ArtifactDependenciesPort
product-servicecom.shopease / product-serviceSpring Web, Spring Data JPA, H2 (or MySQL), Validation, Actuator8081
order-servicecom.shopease / order-serviceSpring Web, Spring Data JPA, H2 (or PostgreSQL), Validation, Actuator8082

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