Spring 3.0 Scheduled Annotation..
@Scheduled annotation 사용하기.Spring 3.0부터 스케줄된 작업, 비동기 작업을 지원하고 있다.
1. Scheduled를 위한 메타 데이터 등록하기. :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<!-- @Scheduled와 @Async 사용 설정 -->
<task:annotation-driven />
</beans>
2. Task 인터페이스 생성하기.
public interface Task {
public void runTask() ;
}
3. 동기식 태스크 생성하기.
@Component("syncTask")
public class SyncTask implements Task {
public void runTask() {
System.out.println("Sync Task..."); }
}
4. 동기식 태스크 호출하기.
@Service
public class TaskExecuteService {
@Autowired
@Qualifier("syncTask")
private Task task;
@Scheduled(cron="*/5 * * * * ?")
public void doSchedule() {
task.runTask();
}
@Scheduled(fixedDelay=5000)
public void doScheduleByFixedDelay() {
task.runTask();
}
@Scheduled(fixedRate=5000)
public void doScheduleByFixedRate() {
task.runTask();
}
}
6. 비동기 처리 수행하기.
@Async 를 이용하면 비동기적으로 해당 태스크를 수행한다. 이는 해당 스케줄러를 Spring의 TaskExecutor에 제출하는 작업을 수행한다.@Component("asyncTask")
public class AsyncTask implements Task {
@Async
public void runTask() {
System.out.println("Async Task run" + new Date());
}
}
7. 비동기 처리를 위한 풀 지정하여 수행하기.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<!-- @Scheduled 와 @Async annotations 동시 사용하기. -->
<task:annotation-driven executor="executorWithPoolSizeRange" scheduler="taskScheduler"/>
<!--
태스크가 서브밋 되면 executor는 우선 사용하지 않는 thread를 가져와서 사용하게 된다. 만약 사용할 수 있는
스레드가 없다면 (core size에 도달해버린경우) 태스크는 큐에 해당 작업을 넣게 된다. 만약 큐가 모두 차 있다면
executor는 태스크를 reject 한다.
-->
<!--
사용할 executor 지정하기.
ThreadPoolTaskExecutor 인스턴스가 생성이 된다. 여기에는 pool-size, queue-capacity, keep-alive,
reject-policy 값들을 지정할 수 있다.
-->
<task:executor id="executorWithPoolSizeRange"
pool-size="5-25"
queue-capacity="100"/>
<!--
ThreadPoolTaskScheduler 인스턴스에 pool size 설정하기.
-->
<task:scheduler id="taskScheduler" pool-size="1"/>
</beans>
This article brought from http://krams915.blogspot.kr/2011/01/spring-3-task-scheduling-via.html
EmoticonEmoticon