일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- intellij
- Java
- Gradle
- datasource
- oracle
- Spring
- between 날짜
- python 개발환경
- git
- 배열스트링
- ORACLE CLOUD
- Linux
- oracle between
- log4j profile
- mybatis
- 라즈베리파이
- MySQL
- hikaricp
- ubuntu
- catalina log
- github
- STS
- Spring Security
- bitbucket
- springboot
- between date
- log4j2
- template
- Spring Boot
- hikari
Archives
- Today
- Total
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- intellij
- Java
- Gradle
- datasource
- oracle
- Spring
- between 날짜
- python 개발환경
- git
- 배열스트링
- ORACLE CLOUD
- Linux
- oracle between
- log4j profile
- mybatis
- 라즈베리파이
- MySQL
- hikaricp
- ubuntu
- catalina log
- github
- STS
- Spring Security
- bitbucket
- springboot
- between date
- log4j2
- template
- Spring Boot
- hikari
Archives
- Today
- Total
파워노트
@Async @Scheduler ThreadPool 생성 및 사용. 본문
반응형
* Scheduler 및 비동기 처리 에 대해 Thread pool 생성 설정 및 사용을 해보자 .
# xml 설정.
[ servlet-context.xml ]
<task:executor id="AsyncExecutor" pool-size="10-100" queue-capacity="50" />
<task:scheduler id="SchedulerExecutor" pool-size="5" />
<!-- @Async and @Scheduler 설정 executor 는 기본으로 사용할 executor 설정. 설정이 없을때는 @Async-->
<task:annotation-driven executor="AsyncExecutor" scheduler="SchedulerExecutor" />
task:execute : Async 비동기 처리시에 사용할 pool 설정.
task:scheduler : scheduler 에서 사용할 pool 설정
task:annotation-driven : @Async @Scheduler 사용가능하게 하며, 기본 async executor 및 scheduler 를 설정한다.
** (주의 사항 ) executor 가 설정되어 있지 않은경우 기본적으로 @Async 와 같이 (id 지정 사용없이 )를 사용하면 SimpleAsyncTaskExecutor를 이용하게 되어 쓰레드제한 없이 무한으로 처리된다.
** 따라서 @Async("AsyncExecutor") 와 같이 명시적으로 사용하는것이 깔끔함.
[ * Scheduler - class 내에서의 사용 ]
@Scheduled(cron = "10 * * * * *")
public void scheldulerlog() {
log.info("############# Scheduler ############## [[ " + Thread.currentThread().getName());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("############# Scheduler ############## ]] " + Thread.currentThread().getName());
}
[ scheduled cron 표현식 ]
( cron = 10 * * * * * )
1 2 3 4 5 6
1 : 초(0-59)
2 : 분(0-59)
3 : 시간(0-23)
4 : 일 (1-31)
5 : 월 (1-12)
6 : 요일 (0-7) 0과 7은 일요일이며, 1부터월요일 6이 토요일
* : 모든조건
? : 설정 값 없을 때 (날짜와 요일에서만 사용가능 )
- : 범위지정
, : 여러값 지정
/ : 초기값과 증가치 설정
[ * Async - class 내에서의 사용 ]
제약사항 :
1. public 한 메소드에만 써야한다.
2. 같은 클레스 안에서 @Async를 적용한 메소드를 사용하면 작동하지 않는다.
3. return Type이 void이거나 Future객체를 사용해야 한다.
@Async("AsyncExecutor")
public void backgroundJob() {
log.info("############# Async ############## [[" + Thread.currentThread().getName());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("############# Async ############## ]]" + Thread.currentThread().getName());
}
반응형
'spring legacy' 카테고리의 다른 글
tomcat 성능 향상. maxKeepAliveRequests="1" (0) | 2022.03.11 |
---|---|
spring legacy project 에서 log4j2.xml 을 profile로 관리 할때 (0) | 2022.03.04 |
spring properties 에 대해서... (0) | 2022.03.04 |
Comments