반응형
실행중인 프로세스 이외의 비동기 작업이 필요한 대상이 있다면
해당 메서드에 @Async어노테이션을 추가하면 된다.
@Async
public void runAsync() {
// Run run do run run Aikatsu
}
해당 방식은 전통적인 방식으로 동작되는 코드 이다. 매우 간단하다.
하지만 다른 스레드로 실행 시키려고자 한다면 @EnableAsync 설정을 따로 해야한다.
@Configuration
@EnableAsync
public class AsyncConfiguration {
private final int ASYNC_THREAD_POOL_SIZE = 5;
@Bean(name = "threadPoolTaskExecutor")
public Executor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(ASYNC_THREAD_POOL_SIZE);
taskExecutor.setMaxPoolSize(ASYNC_THREAD_POOL_SIZE);
taskExecutor.setQueueCapacity(Integer.MAX_VALUE);
taskExecutor.setThreadNamePrefix("threadPoolTaskExecutor-");
taskExecutor.initialize();
return taskExecutor;
}
}
Executor를 직접 생성하여 Bean으로 등록한다.
이렇게 생성한 실행 Executor는 아래와 같이 별칭으로 사용 가능하다.
@Async("threadPoolTaskExecutor")
public void runAsync() {
// Run run do run run Aikatsu
}
이렇게 매번 별칭을 주어 설정하는것이 아니라 일괄 처리를 하려면,
@Configuration
@EnableAsync
public class AsyncConfiguration implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
return new ThreadPoolTaskExecutor();
}
}
위의 코드와 같이 설정하고 아래의 형태처럼 처음에 보여줬던 기본 형태로 호출 가능하다.
@Async
public void runAsync() {
// Run run do run run Aikatsu
}
반응형
'Back > Spring Java' 카테고리의 다른 글
압축파일 생성 (0) | 2020.07.03 |
---|---|
Spring 필드주입(@Autowired)보다 생성자주입을 권장하는 이유 (0) | 2020.05.25 |
for문(Loop) 성능 개선 - 2 (0) | 2020.04.16 |
for문(Loop) 성능 개선 - 1 (0) | 2020.04.13 |
File객체를 이용한 파일삭제 (0) | 2020.04.01 |