java/java

java 비동기 처리 ( in RestController )

내가 만드는게 길이 된다 2023. 9. 21. 13:33

참조사이트 >>

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