참조사이트 >>
1. 여러 비동기 처리 방식
https://velog.io/@pllap/Java에서의-비동기-프로그래밍
https://velog.io/@pjhyng0125/Java-함수-비동기-호출하기-Async-vs-Sync
https://steady-coding.tistory.com/611
ex) SpringBoot 에서 @ 사용한 방법( > @Async, )
2. @RestController, @Async
https://stuffdrawers.tistory.com/8
3. @RestController, @Async , 주의점
https://jeong-pro.tistory.com/187
https://jeong-pro.tistory.com/187
아래 소스는 https://velog.io/@pllap/Java에서의-비동기-프로그래밍 의 소스를 수정해서 테스트용으로 만들었습니다.
http://localhost:8080/helloJson.do 를 실행시키면
화면에 "hello world react call" 이 표시된 뒤에
이클립스 console 창에 [오래걸리는업무]=======================end 가 표시된다.
package com.demo.exam.web;
import java.util.HashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class COMAjaxController {
private static final Logger LOGGER = LoggerFactory.getLogger(COMAjaxController.class);
// 요청 매핑 어트리뷰트
@RequestMapping(value = "/helloJson.do")
@ResponseBody
public ModelAndView helloJson(Model model) {
ModelAndView mv = new ModelAndView("/helloJson");
ExecutorService execTP = Executors.newCachedThreadPool();
// 오래걸리는업무 (스레드)
execTP.submit(() -> {
trace("[오래걸리는업무]=====================start");
try {
Thread.sleep(5000); //5초
} catch (InterruptedException e) {
e.printStackTrace();
}
trace("[오래걸리는업무]=======================end");
});
// 작업2
trace("[간단업무]=====================start");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
trace("[간단업무]=====================end");
execTP.shutdown();
HashMap<String,Object> mapResult = new HashMap<String, Object>();
mapResult.put("RTN_CODE", "0");
mapResult.put("RTN_MSG", "성공적으로 처리되었습니다.");
LOGGER.debug("mapResult========={}", mapResult);
mv.addObject("mapResult", mapResult);
mv.addObject("msg", "테스트입니다");
// 결과는 hello world
//return "hello world react call"; //Json return
return mv;
}
private static void trace(String strLog) {
System.out.println(Thread.currentThread().getName() + ">>>>" + strLog);
}
}
helloJson.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Json Jsp Test</title>
<script type="text/javascript">
function fnOnLoad(){
alert("1");
var objJson = "${mapResult}";
console.log(objJson);
var strJson = JSON.stringify(objJson);
console.log(strJson);
}
</script>
</head>
<body onload="fnOnLoad();">
Hello Json Jsp Test <br><br>
${msg} <br><br>
${mapResult} <br><br>
${mapResult.RTN_CODE} <br><br>
${mapResult.RTN_MSG} <br><br>
</body>
</html>'java > java' 카테고리의 다른 글
| 참조하는 jar파일 버전up /WAR 파일 만들기/WAR 파일 압축풀기 (0) | 2024.04.23 |
|---|---|
| [java]RestTemplate TLS (0) | 2024.01.18 |
| [java]Thread.join (0) | 2024.01.08 |
| RestTemplate (0) | 2023.08.23 |
| Xml to Object ( jaxb xml Unmarshaller ) (0) | 2023.08.21 |