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 구조 |
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 이 주기적으로 데이터를 가져오는 예제를 만들었다. 기업 프로그램 뿐만 아니라 개인 서버를 구축해서 데이터를 가져올 때 유용하게 쓸 수 있다. 한번 쯤 해보자. 소스는 Github 에 있다.
댓글
댓글 쓰기