기존에는 쿼츠 혹은 배치를 이용하여 실시간 스케줄러를 구현하였는데
"spring-task"를 이용해보니 쿼츠를 사용할 필요도 없이 간편하게 개발이 가능하여 포스팅을 하게 되었습니다.
프로젝트생성부터 DB연동하여 실행하는 부분까지 한번에 진행하도록 하겠습니다.
1.New Spring Project -> Simple Spring Web Maven -> 프로젝트명 : "spring_task"
2.spring_task프로젝트 마우스 우클릭 -> Maven -> Update Project.. -> OK
1. beans 태그에 하단 속성 추가
xmlns:task="http://www.springframework.org/schema/task"
2. xsi:schemaLocation 내에 다음 코드 추가
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
3. beans 태그의 자식태그 추가 (Job Scheduler 연동)
<context:component-scan base-package="com.scheduler" /> <task:scheduler id="jobScheduler" pool-size="10" /> <task:annotation-driven scheduler="jobScheduler" />
DB설정 부분에 대해서는 하단 링크를 참고해주세요
※ 본인은 MySQL을 이용하여 설명을 진행하겠습니다.
2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 Maven을 이용하여 pom.xml에 oracle,mysql,mssql jdbc 라이브러리 등록하기
2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 + MyBatis 기본설정 + 연동테스트 후 쿼리로그 확인해보기
2014/11/14 - [개발에필요한연동법/스프링연동] - Spring3 + Mybatis연동에 추가로 트랜잭션 설정 하여 실패시 Rollback 처리하기
2014/11/16 - [개발에필요한연동법/스프링연동] - Spring3 + Mybatis 여러개 Datasource 연동법(다중 트랜잭션 포함)
트랜잭션 및 다중DB 연동에 대해서는 생략하도록 하겠습니다.
1. com.scheduler.Scheduler.java 코드 작성
@Component public class Scheduler { @Autowired private SchedulerDao schedulerDao; @Scheduled(cron = "0 45 11 * * *") public void cronTest1(){ try { String value = schedulerDao.test(); System.out.println("value:"+value); } catch (Exception e) { e.printStackTrace(); } } }
2. com.scheduler.dao.SchedulerDao.java 코드 작성
public interface SchedulerDao { public String test() throws SQLException; }
3. com.scheduler.dao.impl.SchedulerDaoImpl.java 코드 작성
@Repository public class SchedulerDaoImpl implements SchedulerDao { @Autowired private SqlSession query; public String test() throws SQLException { return query.selectOne("query.test"); } }
4. query.xml mybatis XML 쿼리 작성
<select id="test" resultType="String"> SELECT 'test' </select>
위처럼 코드 작성이 완료되었다면 Tomcat에 프로젝트 ADD 한다음 실행을 해보도록 하겠습니다.
※ @scheduled 어노테이션을 확인해보면 expression이 존재합니다.
바로 정의한 시간에 해당 메서드를 실행하겠다라는 선언을 해주는것인대
샘플코드를 기준으로 간단하게 설명하겠습니다.
"0 45 11 * * *"
"초 분 시 일 월 요일" 에 대한 설정을 의미하는것인대
"오전 11시 45분 00초"에 해당 메서드 실행을 의미합니다.
"*" 표시는 항상/모두 를 의미하는 expression입니다.
만약 서버를 계속 켜놓는다 가정한다면
"항상 오전 11시45분00초에 메서드를 실행하라"
라는 의미가 되는것입니다.
정상적으로 스케쥴러 실행이 완료 되었습니다.
만약 여러개의 스케쥴러를 구축하고 싶으시다면 method 추가 후
@Scheduled 어노테이션으로 동일하게 정의해주시면 되겠습니다.
by 개발로짜
Spring3 MVC와 Mybatis를 이용하여 이미지를 blob타입으로 db 저장 및 출력해보기 (13) | 2014.12.21 |
---|---|
Spring3 MVC + HttpClient를 이용하여 GET/POST/Multipart API 웹서버 구축해보기 (2) | 2014.12.07 |
Spring3 + ibatis(아이바티스) 연동해보고 쿼리결과값 콘솔에 출력해보기 (5) | 2014.11.17 |
Spring3 + Mybatis 여러개 Datasource 연동법(다중 트랜잭션 포함) (0) | 2014.11.16 |
Spring3 + Mybatis연동에 추가로 트랜잭션 설정 하여 실패시 Rollback 처리하기 (2) | 2014.11.14 |