SPRING @Async를 활용한 multi thread 구현 - 5 - 구현
2017. 7. 11. 11:54ㆍframework/spring
SPRING @Async를 활용한 multi thread 구현 - 5 - 구현
Spring 에서 비동기 처리를 하기 위해서 AsyncConfigurer@Asynk를 사용하려고 한다.
개발 환경은 Java 8 , Tomcat 8 , Spring 4.1 이다. |
본 포스팅은
이번 시간에는 @Async를 활용하여 만든 Task를 사용해 본다.
사용할 컨트롤러 생성
1
2 |
@Controller("SampleAsyncController")
public class SampleAsyncController { |
cs |
AsyncConfig, AsyncTask 들을 @Resource 를 사용해서 가져온다.
1
2
3
4
5
6
7
8
9
10
11 |
/** 샘플 스레드 */
@Resource(name = "asyncTaskSample")
private AsyncTaskSample asyncTaskSample;
/** 기타 스레드 */
@Resource(name = "asyncTaskEtc")
private AsyncTaskEtc asyncTaskEtc;
/** AsyncConfig */
@Resource(name = "asyncConfig")
private AsyncConfig asyncConfig; |
cs |
다음으론 실제로 사용해 봐야 겠지 ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |
@RequestMapping("/sample/sampleTask.do")
public ModelAndView doTask(HttpServletRequest request, HttpServletResponse response) throws Exception {
//////////////////////////////////////////////////////////////////////////////////////////////////
// 스레드 생성
//////////////////////////////////////////////////////////////////////////////////////////////////
try {
// 등록 가능 여부 체크
if (asyncConfig.isSampleTaskExecute()) {
// task 사용
asyncTaskSample.executorSample("ㄱ");
} else {
System.out.println("==============>>>>>>>>>>>> THREAD 개수 초과");
}
} catch (TaskRejectedException e) {
// TaskRejectedException : 개수 초과시 발생
System.out.println("==============>>>>>>>>>>>> THREAD ERROR");
System.out.println("TaskRejectedException : 등록 개수 초과");
System.out.println("==============>>>>>>>>>>>> THREAD END");
}
ModelAndView mav = new ModelAndView();
mav.setViewName("sample/sampleTask");
return mav;
} |
cs |
2# : 메소드 생성
8# : 등록 가능 여부 체크
두번째 포스팅에서 만든 pool 개수를 체크하는 함수이다. 참고하기 바란다.
10# : task 사용
14# : TaskRejectedException 사용
TaskRejectedException 은 등록 개수가 초과했을 경우 발생한다.
사용법은 생각보다 간단하다.
위와 같은 방법으로 여러 task 에 접근해 사용이 가능하다.
이상으로 Spring 에서 다중 스레드 생성에 관한 포스팅이 모두 끝이났다.
전체소스
SampleAsyncController.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107 |
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.core.task.TaskRejectedException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/**
* @Title : 샘플 Controller
* @Filename : SampleController.java
*/
@Controller("SampleAsyncController")
public class SampleAsyncController {
/** 시뮬레이션 스레드 */
@Resource(name = "asyncTaskSample")
private AsyncTaskSample asyncTaskSample;
/** 기타 스레드 */
@Resource(name = "asyncTaskEtc")
private AsyncTaskEtc asyncTaskEtc;
/** AsyncConfig */
@Resource(name = "asyncConfig")
private AsyncConfig asyncConfig;
/**
* 샘플 Sample 멀티 쓰레드 화면
*
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping("/sample/sampleTask.do")
public ModelAndView doTask(HttpServletRequest request, HttpServletResponse response) throws Exception {
//////////////////////////////////////////////////////////////////////////////////////////////////
// 스레드 생성
//////////////////////////////////////////////////////////////////////////////////////////////////
try {
// 등록 가능 여부 체크
if (asyncConfig.isSampleTaskExecute()) {
// task
asyncTaskSample.executorSample("ㄱ");
} else {
System.out.println("==============>>>>>>>>>>>> THREAD 개수 초과");
}
} catch (TaskRejectedException e) {
// TaskRejectedException : 개수 초과시 발생
System.out.println("==============>>>>>>>>>>>> THREAD ERROR");
System.out.println("TaskRejectedException : 등록 개수 초과");
System.out.println("==============>>>>>>>>>>>> THREAD END");
}
ModelAndView mav = new ModelAndView();
mav.setViewName("sample/sampleTask");
return mav;
}
/**
* 샘플 ETC 멀티 쓰레드 화면
*
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping("/sample/sampleTask2.do")
public ModelAndView doTask2(HttpServletRequest request, HttpServletResponse response) throws Exception {
//////////////////////////////////////////////////////////////////////////////////////////////////
// 스레드 생성
//////////////////////////////////////////////////////////////////////////////////////////////////
try {
List<String> strList = new ArrayList<String>();
strList.add("A");
strList.add("B");
strList.add("C");
strList.add("D");
// 등록 가능 여부 체크
if (asyncConfig.isEtcTaskExecute(strList.size())) {
for (int i = 0; i < strList.size(); i++) {
// task 사용
asyncTaskEtc.executorEtc(strList.get(i));
}
} else {
System.out.println("==============>>>>>>>>>>> M > THREAD 개수 초과");
}
} catch (TaskRejectedException e) {
// TaskRejectedException : 개수 초과시 발생
System.out.println("==============>>>>>>>>>>> M > THREAD ERROR");
System.out.println("TaskRejectedException : 등록 개수 초과");
System.out.println("==============>>>>>>>>>>> M > THREAD END");
}
ModelAndView mav = new ModelAndView();
mav.setViewName("sample/sampleTask");
return mav;
}
}
|
cs |
'framework > spring' 카테고리의 다른 글
SPRING @Async를 활용한 multi thread 구현 - 4 - ExceptionHandler 생성 (0) | 2017.07.11 |
---|---|
SPRING @Async를 활용한 multi thread 구현 - 3 - @Async 사용 및 Task 추가 (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 |