스프링과 quartz 라이브러리: http://www.terracotta.org/downloads/quartz-scheduler
※ 작성할 파일 목록
1. Main.java: 프로그램 시작 파일
2. JobTask.java: 주기적으로 실행 될 작업 클래스
3. QuartzService.java: 위의 클래스를 스케쥴러를 통해 실행시켜줄 클래스
4. SampleDao.java: DAO 인터페이스
5. SampleDaoImpl.java: SampleDao 인터페이스를 구현한 클래스
6. applicationContext-Quartz.xml: 스프링 설정 파일
7. sql-map-config.xml: 아이바티스 설정 파일(커넥션, 트랜잭션...)
8. quartz.xml: 아이바티스 설정 파일(mapping할 sql 기술)
9. jdbc.properties: jdbc 설정 정보 파일(드라이버, 연결 Url, Id, Pw)
10. log4j.properties: log4j 설정 파일
(간단한 프로그램인데 계층을 나누다 보니 파일이 많아졌다..-_-; )
작업 과정
1. Java Project 생성
- 별거 없다. 그냥 eclipse에서 Java Project 생성하면 땡!
2. 스프링 설정 파일 생성(applicationContext-Quartz.xml)
쫌 복잡한데..일단은 그대로 올린다.
<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!-- ========================= GENERAL DEFINITIONS ========================= --> <!-- Configurer that replaces ${...} placeholders with values from properties files --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>jdbc.properties</value> </list> </property> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- ############################### iBatis 관련 부분 시작 ############################### --> <!-- SqlMap setup for iBATIS Database Layer --> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" value="sql-map-config.xml"/> <property name="dataSource" ref="dataSource"/> </bean> <!-- DAO Definition: iBatis implementations, sqlMapClient setter Injection --> <bean id="sampleDao" class="com.flk.dao.SampleDaoImpl"> <property name="sqlMapClient" ref="sqlMapClient"/> </bean> <!-- ############################### iBatis 관련 부분 끝 ############################### --> <!-- 간단한 절차 설명 Step1. 반복할 작업을 가진 JobTask 클래스를 스케쥴러를 통해 실행하게 해주는 QuartzService 에 대한 Bean 정의 Step2. JobDeailBean Step3. Quartz Trigger 정의 Step4. SchedulerFactoryBean 에 설정한 JobDeailBean 과 Trigger 주입 --> <!-- Step1. 주기적으로 실행될 JobTask 클래스 Bean 설정 --> <bean name="JobTask" class="com.flk.quartz.JobTask"> <property name="dao" ref="sampleDao"></property> </bean> <!-- Step2. JobDeailBean 설정 --> <bean name="JobProcess" class="org.springframework.scheduling.quartz.JobDetailBean"> <!-- jobClass: 실행시킬 클래스 --> <property name="jobClass" value="com.flk.quartz.QuartzService"></property> <property name="jobDataAsMap"> <map> <!-- 실행시킬 클래스의 DI --> <entry key="jobTask"> <ref bean="JobTask"/> </entry> </map> </property> </bean> <!-- Step3. Trigger 설정 Trigger의 종류 1. CronTriggerBean: Linux의 CronTab과 동일 2. SimpleTriggerBean: 보다 간단한 Trigger --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="JobProcess"></property> <!-- 15분마다 반복 --> <property name="cronExpression" value="0 0/15 * * * ?"></property> <!-- value는 1000 이 1초 <property name="repeatInterval" value="10000"></property> --> </bean> <!-- Step4. SchedulerFactoryBean 에 설정한 JobDeailBean 과 Trigger 주입 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobDetails"> <list> <ref bean="JobProcess"/> </list> </property> <property name="triggers"> <list> <ref bean="cronTrigger"/> </list> </property> </bean> </beans> |
3. 주기적으로 실행될 클래스(JobTask.java)
package com.flk.quartz;
import java.util.Date;
import com.flk.dao.SampleDao;
/** 반복할 작업을 가진 클래스 */
public class JobTask {
private SampleDao dao;
public void setDao(SampleDao dao) {
this.dao = dao;
}
public void insert() {
System.out.println("Task 실행" + new Date());
dao.insertQuartzTest();
} } |
4. 위의 클래스를 스케쥴러를 통해 실행시켜줄 클래스(QuartzService.java)
package com.flk.quartz; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; // QuartzJobBean 을 상속 받아야 한다. public class QuartzService extends QuartzJobBean { private JobTask jobTask; public void setJobTask(JobTask jobTask) { this.jobTask = jobTask; } @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { jobTask.insert(); } } |
5. DAO 인터페이스(SampleDao.java)
package com.flk.dao; import org.springframework.dao.DataAccessException; /** * iBatis dao interface */ public interface SampleDao { /** * sample insert * @throws DataAccessException */ public String insertQuartzTest() throws DataAccessException; } |
6. SampleDao 인터페이스를 구현한 클래스 (SampleDaoImpl.java)
package com.flk.dao; import org.springframework.dao.DataAccessException; import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; /** * sample iBatis dao interface */ public class SampleDaoImpl extends SqlMapClientDaoSupport implements SampleDao { @Override public String insertQuartzTest() throws DataAccessException { return (String) getSqlMapClientTemplate().insert("Quartz.insert"); } } |
7. iBatis 설정 파일 - 커넥션, 트랜잭션.. (sql-map-config.xml)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" useStatementNamespaces="true" /> <sqlMap resource="ibatis/config/maps/quartz.xml" /> </sqlMapConfig> |
8. iBatis 설정 파일 - mapping할 sql 기술(quartz.xml)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="Quartz"> <insert id="insert"> INSERT INTO Quartz_Test(inputtime) VALUES( now() ) </insert> </sqlMap> |
9. jdbc 설정 정보 파일 (jdbc.properties)
# Properties file with JDBC-related settings.
# Applied by PropertyPlaceholderConfigurer from "dataAccessContext-local.xml".
# Targeted at system administrators, to avoid touching the context XML files.
# June OMC
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://xxx.xxx.xxx.xx/DB_NAME?useUnicode=true&characterEncoding=euckr
jdbc.username=DB 계정
jdbc.password=DB 계정 암호 |
[참조:http://abacus.tistory.com/244]
댓글 없음:
댓글 쓰기