728x90
반응형
SMALL
spring에서 @Async 를 이용하여 비동기로 서버를 구축할 수 있다.
[AsyncConfig.java]
@EnableAsync
public class AsyncConfig {
@Bean
public Executor getAsyncExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(8);
executor.setMaxPoolSize(8);
executor.setQueueCapacity(500);
executor.setThreadNamePrefix("test-pool-");
executor.initialize();
return executor;
}
}
먼저 비동기를 위한 기본 세팅을 해준다.
기본적으로 쓰는 메소드
setCorePoolSize
ThreadPoolExecutor가 인스턴스 되면서 기본적으로 띄울 스레드 개수. 아무작업이 없어도 corePoolSize만큼 스레드가 생성됨
setMaxPoolSize
ThreadPool 최대개수, queueCapa까자 꽉 차는 경우 maxPoolSize 만큼 넓혀감.
setQueueCapacity
스레드 대기큐, 큐카파가 꽉차면 스레드가 추가로 생성됨.
setThreadNamePrefix
스레드에 사용할 이름, ThreadPool이 여러군데에서 관리되면 알아보기 쉽게 사용. SpringBoot의 SimpleLoggingFormat4Java에서 이 이름으로 보여준다.
[AsyncController.java]
@RestController
@Slf4j
@RequiredArgsConstructor
public class AsyncController {
private final AsyncService asyncService;
@GetMapping("/test")
private String test(){
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
asyncService.createDummy(i);
}
log.info("성능 시간 :" + (System.currentTimeMillis() - startTime)+ "ms");
log.info("성능 시간 :" + (System.currentTimeMillis() - startTime)+ "ms");
log.info("성능 시간 :" + (System.currentTimeMillis() - startTime)+ "ms");
log.info("성능 시간 :" + (System.currentTimeMillis() - startTime)+ "ms");
log.info("성능 시간 :" + (System.currentTimeMillis() - startTime)+ "ms");
return "h2";
}
}
[AsyncService.java]
@Service
public class AsyncService {
private static final Logger logger = LoggerFactory.getLogger(AsyncService.class);
@Async //비동기로 할건지안할건지 핵심 어노테이션
public void createDummy(int i) {
logger.info("Async-test : {}",i);
}
}
결과.
@Async 사용하기 전.
for 문으로 돌린 값들이 순서대로 로그에 찍히는 것을 볼 수 있다.
@Async 사용 한 후
로그 왼쪽에 test-pool 이라는 텍스트뒤에 붙는 숫자 (1 ~ 8) 에서만 왓다갔다 하는데
아까전 위에 설정해줬던
executor.setMaxPoolSize(8);
이 코드가 최대 쓰레드 사이즈를 8로 지정해놨기때문에, 그안에서만 쓰레드 할당하는것을 볼 수 있다.
또한 로그 맨오른쪽 숫자들도 순서가 뒤죽박죽 각자 처리를 기다리지않고 비동기로 바로바로 처리되는것을 알수있다.
끝
728x90
반응형
LIST
'Spring' 카테고리의 다른 글
SpringBoot Paging(페이징)에서 제공하는 변수 커스터마이징 하기. (1) | 2023.05.11 |
---|---|
Springboot + chatGPT API 연동해보기. (9) | 2023.04.24 |
List -> Page 변환 (0) | 2023.03.20 |
Could not write JSON: Infinite recursion (stackOverflowError) (0) | 2023.03.16 |
@ModelAttribute 와 @RequestParam (0) | 2022.12.29 |