Spring 3.0 Scheduled 어노테이션

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
























Share this

Related Posts

Previous
Next Post »