2017. 7. 11. 11:25ㆍframework/spring
SPRING @Async를 활용한 multi thread 구현 - 3 - @Async 사용 및 Task 추가
Spring 에서 비동기 처리를 하기 위해서 AsyncConfigurer@Asynk를 사용하려고 한다.
개발 환경은 Java 8 , Tomcat 8 , Spring 4.1 이다. |
본 포스팅은
이번 시간에는 @Async를 활용하여 Task를 만들어 보자.
이전 시간에 Executor 를 2개 만들었다.
그래서 필자는 AsyncTask 를 관리할 수 있는 class 파일을 2개 만들었다.
1개를 만들어도 상관없지만 구분하여 혼선이 없도록 하였다.
먼저 기본적으로 생성된 Executor 인 executorSample 과 연결할 AsyncTask class 파일이다.
1
2 |
@Service("asyncTaskSample")
public class AsyncTaskSample { |
cs |
Service 라고 등록하고 클래스 파일명은 AsyncTaskSample로 만든다.
이제 task 를 만들어 보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 |
@Async("executorSample")
public void executorSample(String str) {
// LOG : 시작 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD START");
// 내용
// 내용
// 내용
// LOG : 종료 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD END");
}
@Async("executorSample")
public void executorSample2(String str) {
// LOG : 시작 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD START");
// 내용
// 내용
// 내용
// LOG : 종료 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD END");
} |
cs |
1#, 16# : @Async 를 사용해서 비동기 메소드라고 선언하고 연결할 Executor 명을 적어준다.
나머지는 특별한 내용 없다.
내용에는 이제 비동기로 할 작업을 코딩하거나 함수를 호출하면 끝이다.
위 메소드를 생성 시 필자는 리턴타입을 void로 작성했다.
리턴타입은 void와 Future<String> 두가지로 작성할 수 있다.
Future<String>는 메소드의 실행 결과를 리턴한다고 하지만 크게 필요는 없어보인다.
상황에 따라 다르겠지만 필자의 경우가 그랬으니 생략함.
또한 @Async 사용시 제약사항이 있다고 한다.
첫번째는 함수는 무조건 public 타입이여야 한다.
두번째는 같은 클래스 안에서 셀프호출은 안된다.
이 두가지만 조심하면 될거같다.
executorEtc Executor 와 연결할 class 파일도 동일하게 만들어 주면 된다.
이름만 sample 에서 etc로 바뀔 뿐 모든것이 같아서 생략한다.
맨 아래 전체 소스에서 확인하면 된다.
다음 시간에는 ExceptionHandler 을 구현해 본다.
전체소스
AsyncTaskSample.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 |
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
/**
* @Title : AsyncTaskSample 관리
* @Filename : AsyncTaskSample.java
*/
@Service("asyncTaskSample")
public class AsyncTaskSample {
/**
* 시뮬레이션 테스트용 함수
*
* @param str
*/
@Async("executorSample")
public void executorSample(String str) {
// LOG : 시작 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD START");
// 내용
// 내용
// 내용
// LOG : 종료 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD END");
}
/**
* 시뮬레이션 테스트용 함수2
*
* @param str
*/
@Async("executorSample")
public void executorSample2(String str) {
// LOG : 시작 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD START");
// 내용
// 내용
// 내용
// LOG : 종료 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD END");
}
}
|
cs |
AsyncTaskEtc.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 |
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
/**
* @Title : AsyncTaskEtc 관리
* @Filename : AsyncTaskEtc.java
*/
@Service("asyncTaskEtc")
public class AsyncTaskEtc {
/**
* 기타 스레드 테스트용 함수
*
* @param str
*/
@Async("executorEtc")
public void executorEtc(String str) {
// LOG : 시작 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD START");
// 내용
// 내용
// 내용
// LOG : 종료 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD END");
}
/**
* 기타 스레드 테스트용 함수2
*
* @param str
*/
@Async("executorEtc")
public void executorEtc2(String str) {
// LOG : 시작 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD START");
// 내용
// 내용
// 내용
// LOG : 종료 입력
// ...
System.out.println("==============>>>>>>>>>>>> THREAD END");
}
}
|
cs |
'framework > spring' 카테고리의 다른 글
SPRING @Async를 활용한 multi thread 구현 - 5 - 구현 (12) | 2017.07.11 |
---|---|
SPRING @Async를 활용한 multi thread 구현 - 4 - ExceptionHandler 생성 (0) | 2017.07.11 |
SPRING @Async를 활용한 multi thread 구현 - 2 - AsyncConfigurer 생성 (0) | 2017.07.11 |
SPRING @Async를 활용한 multi thread 구현 - 1 - 개요 (0) | 2017.07.11 |
spring excel csv download 하기 / super-csv jar 사용하기 / AbstractView (0) | 2017.06.30 |
Security 로그인 후 이전페이지 가기 | spring (4) | 2016.01.05 |
특정 JAVA , JSP 에서 Bean 객체 가져오기 | spring (0) | 2016.01.05 |
메일 보내기 / mail sample | spring (0) | 2016.01.05 |
vo list / form list / @ModelAttribute list / list로 받기 | spring (0) | 2016.01.05 |
@ResponseBody / ajax / 아작스 / messageConverters | spring (0) | 2016.01.05 |