티스토리 뷰
Programming/Spring Boot 시작하기
TaskExecutor 로 @Async 의 Thread 을 Pool 로 관리하기
zepinos 2019. 1. 22. 11:24반응형
Spring 에서 @Async 을 이용해서 쉽게 비동기 method 을 만들 수 있습니다.
대략 다음과 같이 method 정의를 먼저 할 수 있을 겁니다.
@Async public CompletableFuture<String> async(String param1, int param2) { return CompletableFuture.completedFuture(param1 + " : " + param2); }
그리고 이를 다음과 같이 사용할 수 있겠죠.
CompletableFuture<String> result = service.async("status", 100);
하지만, 이렇게 그냥 사용할 경우 @Async 는 SimpleAsyncTaskExecutor 을 기본 TaskExcutor 로 이용하기 때문에 async method 을 호출할 때마다 새로운 Thread 을 생성하게 됩니다. 반드시 문제가 발생한다고 할 수는 없지만, 새로운 Thread 을 생성하고 소멸하는 비용이 증가하고 많은 요청이 몰릴 경우 시스템 장애로 이어질 수 있기 때문에 Pool 을 써야할 때가 있습니다.
Spring Boot 에서 Java Config 을 이용해서 쉽게 이를 해결할 수 있는데 아래와 같이 ThreadPoolTaskExecutor 을 이용하도록 해주면 됩니다.
@Configuration @EnableAsync public class ExecutorConfig { @Bean(name = "taskExecutor") public TaskExecutor taskExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(3); taskExecutor.setMaxPoolSize(30); taskExecutor.setQueueCapacity(10); taskExecutor.setThreadNamePrefix("task-pool-"); taskExecutor.initialize(); return taskExecutor; } }
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor 을 새롭게 생성해서 pool 의 크기와 Thread 명의 접두사 등을 선언해줄 수 있습니다. 그리고 @Bean 으로 등록할 때 name 을 지정할 수 있는데, 이런 식으로 복수의 TaskExecutor 을 등록한 뒤 @Async 에서 원하는 TaskExecutor 을 선택해서 사용할 수도 있습니다.
반응형
'Programming > Spring Boot 시작하기' 카테고리의 다른 글
Jackson MessageConverter 을 상속받아 수정하기 (0) | 2019.01.22 |
---|---|
Spring Boot Java Config 으로 Jackson 설정하기 (0) | 2019.01.22 |
MyBatis 와 JOOQ 을 연동해보기 (0) | 2018.09.05 |
Spring Boot JDBC 을 이용해 DB 에 질의(query)해보기 (0) | 2018.09.05 |
의존성을 추가하여 템플릿(Thymeleaf) 사용 환경 구축하기 (2) | 2018.09.05 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Redmine
- 클라우드플레어
- 시니어 프로그래머
- 도입기
- OracleJDK
- Phabricator
- messages.properties
- 내장 WAS
- 페이징
- 워드프레스
- Nas
- KDE
- couchbase
- manjaro
- Spring MVC
- boot
- paging
- SI
- jooq
- 엘지
- docker
- NoSQL
- RestTemplate
- java config
- Spring Boot
- proxmox
- 외장 WAS
- 프로젝트 규모
- Spring
- git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함