Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_3

2023. 3. 1. 23:02·공부/Spring
반응형

 

 

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Catalogs Microservice

프로젝트 생성

강의에서는 스프링부트 버전을 2.4.2로 선택, 나는 3.0.3으로 선택했다.

 

build.gradle

ModelMapper dependancy 추가

implementation 'org.modelmapper:modelmapper:2.4.2'

 

 

application.yml

server:
  port: 0

spring:
  application:
    name: catalog-service
  h2:
    console:
      enabled: true
      settings:
        web-allow-others: true
      path: /h2-console
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true
    generate-ddl: true
    defer-datasource-initialization: true
  datasource:
    driver-class-name: org.h2.Driver
    url : jdbc:h2:mem:testdb

eureka:
  instance:
    instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka
logging:
  level:
    com.example.catalogservice: DEBUG

 

 

data.sql

insert into catalog(product_id, product_name, stock, unit_price)
    values('CATALOG-001', 'Berlin', 100, 1500);
insert into catalog(product_id, product_name, stock, unit_price)
    values('CATALOG-002', 'Tokyo', 110, 1000);
insert into catalog(product_id, product_name, stock, unit_price)
    values('CATALOG-003', 'Stockholm', 120, 2000);

 

 

CatalogEntity.java

@Data
@Entity
@Table(name = "catalog")
public class CatalogEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 120, unique = true)
    private String productId;

    @Column(nullable = false)
    private String productName;

    @Column(nullable = false)
    private Integer stock;

    @Column(nullable = false)
    private Integer unitPrice;

    @Column(nullable = false, updatable = false, insertable = false)
    @ColumnDefault(value = "CURRENT_TIMESTAMP")
    private LocalDateTime createAt;
}

 

 

CatalogRepository.interface

public interface CatalogRepository extends CrudRepository<CatalogEntity, Long> {
    CatalogEntity findByProductId(String productId);
}

 

 

CatalogDto.java

@Data
public class CatalogDto implements Serializable {

    private String productId;
    private Integer qty;
    private Integer unitPrice;
    private Integer totalPrice;

    private String orderId;
    private String userId;
    
}

 

 

ResponseCatalog.java

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResponseCatalog {
    private String productId;
    private String productName;
    private Integer unitPrice;
    private Integer stock;
    private LocalDateTime createdAt;
}

 

 

CatalogService.interface

public interface CatalogService {

    Iterable<CatalogEntity> getAllCatalogs();
}

 

 

CatalogServiceImpl.java

@Data
@Slf4j
@Service
public class CatalogServiceImpl implements CatalogService{

    CatalogRepository catalogRepository;

    @Autowired
    public CatalogServiceImpl(CatalogRepository catalogRepository) {
        this.catalogRepository = catalogRepository;
    }

    @Override
    public Iterable<CatalogEntity> getAllCatalogs() {
        return catalogRepository.findAll();
    }
}

 

 

CatalogController.java

@RestController
@RequestMapping("/catalog-service/")
public class CatalogController {

    Environment env;
    CatalogService catalogService;

    @Autowired
    public CatalogController(Environment env, CatalogService catalogService) {
        this.env = env;
        this.catalogService = catalogService;
    }

    @GetMapping("/health_check")
    public String status() {
        return String.format("It's Working in Catalog Service on PORT %s",
                env.getProperty("local.server.port"));
    }

    @GetMapping("/catalogs")
    public ResponseEntity<List<ResponseCatalog>> getCatalogs() {
        Iterable<CatalogEntity> catalogList = catalogService.getAllCatalogs();

        List<ResponseCatalog> result = new ArrayList<>();
        catalogList.forEach(v -> {
            result.add(new ModelMapper().map(v, ResponseCatalog.class));
        });

        return ResponseEntity.status(HttpStatus.OK).body(result);
    }
}

 

서버 재실행 후 확인

h2 DB 확인

 

 

apigateway-service에 Catalog-service 등록

  • application.yml
routes:
  - id: user-service
    uri: lb://USER-SERVICE
    predicates:
      - Path=/user-service/**
  - id: catalog-service
    uri: lb://CATALOG-SERVICE
    predicates:
      - Path=/catalog-service/**

 

 

서버 재실행 후 포스트맨 확인

 

 


- 출처 : 인프런 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의

반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/Spring' 카테고리의 다른 글
  • 토비의 스프링 부트 - 스프링 부트 살펴보기
  • Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_4
  • Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_2
  • Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_1
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    에러해결
    QueryDSL
    기출문제
    자바스크립트
    SQL
    Java
    JPA
    프론트엔드
    RESTful
    스프링부트
    알고리즘
    코딩테스트
    개발자
    전자정부프레임워크
    인프런
    Spring
    MSA
    SpringBoot를 이용한 RESTful Web Service 개발
    oracle
    springboot
    백준
    react
    토비의스프링부트
    IT
    방통대
    넥사크로
    프로그래머스
    토이프로젝트
    운영체제
    egov
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_3
상단으로

티스토리툴바