스프링에서 비동기로 작업을 하기위한 개발
예를들어 엑셀의 Row를 DB에 Insert하는과정에서
건수가 너무 많은경우 모든 데이터가 입력되기까지 사용자는 기다려야합니다.
하지만 그런 오류를 개선하고자
엑셀의 Row를 DB에 Insert하는과정은 또 하나의 Thread를 생성해서
작업하도록 할 수 있습니다.
먼저 Spring 설정파일에서 bean을 생성합니다.
1
2
3
4
5
6
7
|
<bean id="workExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="20" />
<property name="queueCapacity" value="10" />
<property name="waitForTasksToCompleteOnShutdown" value="true" />
</bean>
|
cs |
실제 사용될 class에서
Spring에서 제공하는 해당 Class를 선언하고 실행합니다.
1
2
3
4
5
|
@Resource(name = "workExecutor")
private ThreadPoolTaskExecutor workExecutor;
ExcelUploadThread thread = new ExcelUploadThread();
workExecutor.execute(thread);
|
cs |
Thread에서 작업될 로직을 구현합니다.
1
2
3
4
5
6
7
8
|
public class ExcelUploadThread implements Runnable {
//가장중요한건 Runnable을 implements했으니 run함수를 override하여 실제 로직을 구현합니다.
public void run(){
//TO-DO
}
}
|
cs |
정리하자면 Thread를 이용하기위해선 먼저 Bean을 생성하고(어노테이션방법도 있습니다.)
그 생성된 Bean을 사용할 class에서 DI(의존성주입)해줍니다.
그리고 실제 비동기로 작업할 class를 호출함으로써 비동기 작업은 진행됩니다.
감사합니다.
'IT > 개발' 카테고리의 다른 글
Java 파일 읽기, 파일 쓰기 (0) | 2019.10.08 |
---|---|
Spring Transactional annotation (0) | 2019.09.27 |
Oracle LISTAGG (0) | 2019.09.12 |
JAVA CSV파일 엑셀에서 열때 숫자를 문자로 인식 (0) | 2019.09.09 |
JSP JSTL fmt 기능 (0) | 2019.09.08 |