Spring Integration 과 함께 - 실전편(2)

Spring Integration - Polling Example

 이번 post 는 Spring Integration 이 외부 데이터를 가져오는 예제를 만든다. Schedule 을 정해서 주기적으로 데이터를 가져올 수 있어, 개인적인 데이터를 모을 때도 유용하게 쓸 수 있다.

개발환경

  • JDK : OpenJDK 11
  • Spring : 2.4.2
  • DB : h2

구조

환율 가져오는 Flow

 환율을 일정한 주기로 Web 에서 가져온다. 가져온 환율을 DB 에 저장한다.

환율.

 환율은 이 사이트를 참조했다. 아래 URL 에서 데이터를 호출하면, 최신 환율 데이터를 EUR 기준으로 가져온다. 데이터 형식은 JSON이다.

GET https://api.exchangeratesapi.io/latest

DB Tables.

Exchange Rate Table ERD
Exchange Rate Table 구조


Exchange_rate_meta

 Header 정보 역할을 한다. 환율일자, 환율수, 기준통화를 저장한다. 기준 통화는 EUR 이다. 

 exchange_rate 와 FK 관계를 가진다. 이번 FK 관계는 복잡한 연관관계가 필요없기 때문에, JPA 의 @CollectionTable 를 사용했다. 

@Entity
@Table(name = "exchange_rate_meta")
public class ExchangeRateMetaData {

  @Id
  @Column(name = "exchange_date")
  private LocalDate date;

  private Integer count;

  private String base;

  @ElementCollection(fetch = FetchType.LAZY)
  @CollectionTable(name = "exchange_rate", joinColumns = @JoinColumn(name = "exchange_date"))
  private List<ExchangeRate> exchangeRates;

}

Polling Channel.

 Polling은 Spring Integration 이 메시지를 주기적으로 가져오기 위해 사용하는 구성요소다. 이번 예제는 30초에 한번 환율 데이터를 가져온다. 환율로 투기하는 것이 아니라면, 하루에 1번씩 가져오면 된다.

@Configuration
@RequiredArgsConstructor
public class IntegrationConfig {

  private final EntityManager entityManager;

  @Bean
  public IntegrationFlow integrationFlow() {
    return IntegrationFlows.from(() -> new GenericMessage<>(""),
        e -> e.poller(p -> p.fixedDelay(30000)))
        .handle(httpHandler())
        ...
  }
}

결과.

Spring Integration Exchange Rate Result
환율 정보를 가져온 실행 결과

마치며.

 Spring Integration 이 주기적으로 데이터를 가져오는 예제를 만들었다. 기업 프로그램 뿐만 아니라 개인 서버를 구축해서 데이터를 가져올 때 유용하게 쓸 수 있다. 한번 쯤 해보자. 소스는 Github 에 있다.

Resource.

댓글

이 블로그의 인기 게시물

JPA 와 함께 - 느낀점

Scott 과 함께 - Recursive Query 구현하기