728x90
반응형
먼저 읽어볼만한 글
@SpringBootApplication 클래스 작성
package com.jsonobject.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@SpringBootApplication
@EnableAutoConfiguration
@EnableAsync
public class Application {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(10);
taskExecutor.setMaxPoolSize(20);
taskExecutor.setQueueCapacity(50);
return taskExecutor;
}
}
@EnableAsync
를 명시함으로서 비동기로 작동할@Async
가 명시된 빈을 인식하도록 한다.
@Service 클래스 작성
package com.jsonobject.example;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsyncService {
@Async
public void doAsync() {
// 비동기로 실행될 로직을 작성
}
}
- Spring Boot 기반의 웹 애플리케이션은 HTTP 요청이 들어왔을 때 내장된 서블릿 컨테이너(Tomcat)가 관리하는 독립적인 1개의 Worker 쓰레드에 의해 동기 방식으로 실행된다. 하지만 요청 처리 중
@Async
가 명시된 메써드를 호출하면 앞서 등록한 ThreadPoolTaskExecutor 빈에 의해 관리되는 또 다른 독립적인 Worker 쓰레드로 실행된다. 별도의 쓰레드로 동작하기에 원래의 요청 쓰레드는 그대로 다음 문장을 실행하여 HTTP 응답을 마칠 수 있다. @Async
가 명시된 메써드는 반드시 public으로 선언되어야 한다. 또한 같은 클래스 내에서 해당 메써드를 호출할 경우 비동기로 작동하지 않는다.
참고 글
- Creating Asynchronous Methods
- Asynchronous Spring Service
- Calling java methods asynchronous using spring
출처: http://jsonobject.tistory.com/233 [지단로보트의 블로그]
728x90
반응형
'SPRINGBOOT > 소스코드' 카테고리의 다른 글
IntelliJ IDEA에서 Spring Boot 웹 프로젝트 생성하기 (0) | 2017.10.26 |
---|---|
Spring Boot 프로젝트에서 Profile 적용하기 (0) | 2017.10.26 |
Spring Boot, Multipart 파일 업로드 구현하기 (0) | 2017.10.26 |
Spring Boot, JUnit을 이용한 유닛 테스트 구현하기 (0) | 2017.10.26 |
Spring Boot, JSON 변환, LocalDateTime을 ISO8601으로 출력하기 (0) | 2017.10.26 |
Spring Boot, 작업 스케쥴러 데몬 구현하기 (0) | 2017.10.26 |
Spring, RestTemplate으로 REST 클라이언트 구현하기 (0) | 2017.10.26 |
Spring Boot, Logback을 이용한 로그 출력하기 (0) | 2017.10.26 |