스프링 스케줄러, 스레드 사용법
mvc-config.xml
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd"
<task:annotation-driven />
컨트롤러에 @Service 추가
@Service
public class TargetController {
....
}
@PostConstruct, @Scheduled(fixedDelay=5000)
해당 메소드가 서버 시작할 때 시작하고 싶을 때 @PosrtConstruct를 사용하면 WAS가 띄워질 때 실행된다.
스케줄러를 돌릴 메소드에 @Scheduled추가
1000이 1초에 해당해 아래의 경우 5초마다 해당 메소드가 실행됨
@PostConstruct
private void resendThread() {
// TODO Auto-generated method stub//스레드 주기 설정, 5=5초
int sleepSec = 5;
//스레드 갯수 설정
final ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(2);
//스레드 실행 -> run 메소드를 정의해줘야함
exec.scheduleAtFixedRate(new Runnable() {
@Scheduled(fixedDelay=5000)
public void run() {
try {
...
} catch (Exception e) {
e.printStackTrace();
// 에러 발생시 Executor를 중지시킨다
exec.shutdown();
}
}
}, 0, sleepSec, TimeUnit.SECONDS);
}
@PreDestroy
반대로 스프링 컨테이너에서 객체를 제거하기 전에 해야할 작업이 있다면
close()하기전에 ((AbstractApplicationContext) context. close())