티스토리 뷰
- 비동기 : 하나의 요청이 모두 처리되기를 기다리는 것이 아니라 처리되지 않더라도 제어권을 다음 요청에 넘기는 것을 비동기라 한다.
- 제약사항 :
1. public 한 메소드에만 써야한다.
2. 같은 클레스 안에서 @Async를 적용한 메소드를 사용하면 작동하지 않는다.
3. return Type이 void이거나 Future객체를 사용해야 한다.
- @Async를 사용하기 위한 설정
@EnableAsync
public class AppConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(7);
executor.setMaxPoolSize(42);
executor.setQueueCapacity(11);
executor.setThreadNamePrefix("MyExecutor-");
executor.initialize();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new CustomAsyncExceptionHandler();
}
}
public class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
@Override
public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
System.out.println("Exception message - " + throwable.getMessage());
System.out.println("Method name - " + method.getName());
for (Object param : obj) {
System.out.println("Parameter value - " + param);
}
}
}
- Test Code
@Controller
public class TestController {
private static final Logger log = LoggerFactory.getLogger(TestController.class);
@Autowired TestAsync TestAsync;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test() {
log.info("start");
for(int i = 0; i < 10; i++) {
TestAsync.print(i);
}
log.info("finish");
return "view/user/login";
}
}
@Component
public class TestAsync {
private static final Logger log = LoggerFactory.getLogger(TestAsync.class);
@Async
public void print(int count){
log.info("start async : " + count);
try {
Thread.sleep(5000);
} catch (Exception e) {
log.error(e.getMessage());
}
log.info("final async : " + count);
}
}
start
finish
start async : 0
start async : 5
start async : 4
start async : 6
start async : 3
start async : 2
start async : 1
final async : 0
final async : 5
start async : 7
final async : 4
start async : 8
start async : 9
final async : 6
final async : 3
final async : 2
final async : 1
final async : 7
final async : 8
final async : 9
'java&spring' 카테고리의 다른 글
[Java] 문자열 합치기 비교(StringBuffer,StringBuilder,+연산,concat()) (0) | 2016.12.04 |
---|---|
@RestController VS @Controller (0) | 2016.11.01 |
replaceAll과 split에서의 주의점 (0) | 2016.08.25 |
exception 모음 (0) | 2016.08.15 |
[Java] 가변 인수 (0) | 2016.08.07 |