- 비동기식이란 ?
동기식 방식과는 다르게 먼저 시작된 작업의 완료 여부와는 상관없이 새로운 작업을 시작하는 방식이다.
위 그림 Asynchronous와 같이 작업이 병렬로 배치되어 실행되며 작업의 순서가 확실하지 않아 나중에 시작된 작업이 먼저 끝나는 경우도 발생한다.
작업이 종료되지 않은 상태라 하더라도 대기하지 않고 다음 작업을 실행한다.(호출된 메소드가 끝날때까지 기다릴 필요가 없다.)
Spring에서 비동기식 처리하는 방법 입니다.
1. *Config.java를 설정한다.(@Async 기능 켜기)
- 자바 설정(Java configuration)으로 비동기 처리(enabling asynchronous processing)를 쓰려면 간단히 설정 클래스에 @EnableAsync를 추가해주기만 하면 된다.
- AsyncConfig.java (클래스 안에 빈내용이지만 꼭 필요하다.)
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
@Configuration
@EnableAsync
public class AsyncConfig {
}
2. @Async 어노테이션
- @Async 는 두가지 제약사항이 있다
1. public 메소드에만 적용해야한다
2. 셀프 호출(self invocation) – 같은 클래스안에서 async 메소드를 호출 – 은 작동하지않음
이 이유는 간단한데 메소드가 public이어야 프록시가 될수 있기 때문이고 셀프호출은 프록시를 우회하고 해당 메소드를 직접 호출하기때문에 작동하지않는 것이다.
- AsyncCall.java
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class AsyncCall {
@Async
public void callAsyncTest(asyncVO vo) throws SQLException, Exception {
System.out.println("비동기식 테스트");
}
}
- AsyncServiceImpl.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("asyncService")
public class AsyncServiceImpl implements AsyncService {
//비동기식
@Autowired
private AsyncCall asyncCall;
@Override
public void callAsync(asyncVO vo) throws SQLException, RuntimeException, Exception {
asyncCall.callAsyncTest(vo);
}
}
이런식으로 설정을 한다면 비동기식으로 처리할 수 있다.
[ 참고 사이트 ]
728x90
'Spring > Java' 카테고리의 다른 글
[ Java ] HashMap, LinkedHashMap 차이점 및 사용법 (0) | 2022.03.16 |
---|---|
[ Spirng ] SimpleJdbcCall을 사용하여 프로시저 호출하기 (0) | 2022.03.15 |
[ java ] 파일 복사 (4가지 방법) (0) | 2022.03.14 |
[ java ] 서버 물리 경로 구하기 (0) | 2022.03.13 |
[ java ] os별 파일 구분자(File.separator) (0) | 2022.03.13 |
댓글