-
Spring boot 비동기 처리 (Aysnc)Computer Science/Spring boot 2022. 9. 29. 14:24
비동기 처리의 thread 수 등을 설정 할 config 파일을 만들어준다.
package com.server.pandascore.config; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurerSupport; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; @Configuration @EnableAsync public class AsyncConfig extends AsyncConfigurerSupport { @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(2); executor.setMaxPoolSize(10); executor.setQueueCapacity(500); executor.setThreadNamePrefix("async"); executor.initialize(); return executor; } }
초기 core수와 max 설정, 작업이 대기 할 수 있는 queue 사이즈를 설정할 수 있다.
다만 작업의 개수의 따라 유동적으로 thread가 2~10으로 변동되는 방식이 아니다. 2개의 코어로 돌리다가 queue가 다 차게 되면 그 때서야 thread의 수를 max size 만큼 올리는 방식으로 동작하게 된다.이렇게 설정을 하고 나면 이게 사용할 함수에 @Async 만 붙이면 되는 데 주의 할 점이 3가지 있다.
Async 가 안되는 경우가 3가지가 있는데
1. 메소드가 public 이 아니면 Async가 동작하지 않는다.
2. Return type가 void가 아니라면 반환을 해야하기에 당연히도 aynsc 가 동작하지 않는다.
3. 동일 객체 내부에서 호출하면 async가 동작하지 않는다.
ex)
@Async public void getAllMatchList(){ List<Long> leagueIdList = pandaScoreSave.getAllLeagueIdList(); leagueIdList.forEach(leagueId -> { getMatchListByLeagueId(leagueId); }); }
이 함수는 이제 비동기 처리가 가능한 함수이다.
'Computer Science > Spring boot' 카테고리의 다른 글
Spring boot api test code (0) 2022.10.06 Spring boot 와 Spring의 차이 (2) 2022.10.05 spring boot 에서 JWT 사용하기. (0) 2022.09.04 spring boot datadog json으로 log 남기기. (0) 2022.08.05 Cerbot을 통한 SSL 발급받아 Spring boot에 적용하기 (0) 2022.07.27