SPRING
2016.03.03 / 19:03

Spring - Quartz¸¦ »ç¿ëÇÏ¿© ½ºÄÉÁì·¯ ±¸ÇöÇϱâ

dwsi
Ãßõ ¼ö 367

°¡²û ¼­¹ö¿¡¼­ ÁÖ±âÀûÀ¸·Î ¾î¶°ÇÑ ÀÛ¾÷À» ÇÏ°íÀÚ ÇÒ¶§ ¸®´ª½º¿¡¼­´Â Å©·ÐÅÇÀ» »ç¿ëÇÏ¿© ÁÖ±âÀûÀ¸·Î ¾î¶°ÇÑ ÀÛ¾÷À» ó¸®ÇÕ´Ï´Ù.
ÀÌ·± ÁÖ±âÀû ÀÛ¾÷À» ó¸®ÇϱâÀ§ÇØ Spring¿¡¼­ Áö¿øÇØ ÁÖ´Â Quartz½ºÄÉÁì·¯¸¦ ÅëÇØ Å©·ÐÅÇ°ú °°Àº ¿ªÇÒÀ» ÇÏ´Â ½ºÄÉÁì·¯¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
À̹ø¿¡´Â Spring °ú Quartz¸¦ ¿¬µ¿ÇÏ¿© ½ºÄÉÁÙ·¯¸¦ ÀÛ¼ºÇØ º¸°Ú½À´Ï´Ù.

ÀÛ¾÷¼ø¼­´Â 
½ºÇÁ¸µ ±âº» ¼¼Æà -> Quartz ¼¼Æà ¼øÀ¸·Î ÀÛ¾÷ÇÏ°Ú½À´Ï´Ù.

1. ½ºÇÁ¸µ ±âº» ¼³Á¤
1) springframework.org ·Î À̵¿Çϼż­ ½ºÇÁ¸µ ¶óÀ̺귯¸®¸¦ ´Ù¿î ¹Þ½À´Ï´Ù. 

À̹ÌÁö

À§¿Í °°Àº ÆäÀÌÁö°¡ ¶ß¸é ÇØ´ç»çÇ×À» ÀÔ·ÂÇϽðí Access Download ¸¦ Ŭ¸¯Çϼż­ ´Ù¿î·Îµå ÆäÀÌÁö·Î À̵¿ÇÕ´Ï´Ù. (±ÍÂúÀ¸½Å ºÐµéÀº ÇÏ´ÜÀÇ ÆĶõ»öÀ¸·Î "download page"¸¦ ¼±ÅÃÇϽøé ÀÔ·ÂÇϽÃÁö ¾Ê°íµµ ´Ù¿î·Îµå ÆäÀÌÁö·Î À̵¿ÇϽǼö ÀÖ½À´Ï´Ù.

¸¹Àº ¹öÀüÀÇ ¶óÀ̺귯¸® Áß spring-framework-2.5.6.SEC02.zip ¸¦ ´Ù¿î ¹Þ½À´Ï´Ù. ´Ù¸¥ ¹öÀüÀ» ´Ù¿î ¹ÞÀ¸¼Åµµ »ó°ü¾ø½À´Ï´Ù¸¸ ¹öÀü¿¡ µû¶ó ¼¼Æà ³»¿ëÀÌ Á¶±Ý ¾¿ ´Þ¶óÁö¹Ç·Î °°Àº ¹öÀüÀÇ ¶óÀ̺귯¸®·Î ÁøÇàÇÏ´Â °ÍÀÌ ³ªÀ» °Í°°³×¿ä~^^.

2) ÀÌ·¸°Ô ¶óÀ̺귯¸®±îÁö ´Ù¿î·Îµå ¹Þ°í ³ª¸é Eclipse¿Í °°Àº IDE¿¡¼­ Dynamic Web Project¸¦ ¼±ÅÃÇÏ¿© Project¸¦ ÇÑ°³ »ý¼ºÇÕ´Ï´Ù.
(Àú´Â SpringQuartz ¶ó´Â À̸§À¸·Î »ý¼ºÇß½À´Ï´Ù.)

3) ÇÁ·ÎÁ§Æ®°¡ »ý¼ºµÇ¸é ÇÁ·ÎÁ§Æ® ¾È¿¡ /WEB-INF/lib µð·ºÅ丮¿¡ ½ºÇÁ¸µ ¶óÀ̺귯¸®¸¦ ¾ÐÃà Ǭ °÷¿¡ ÀÖ´Â dist/spring.jar ÆÄÀÏÀ» Ãß°¡ÇÕ´Ï´Ù.
* ÆÁ : ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ´Ù º¸¸é À§¿Í°°ÀÌ ¶óÀ̺귯¸® ¹öÀüÀÌ ¾ø´Â jarÆÄÀÏÀ» ±×³É Ãß°¡ÇÏ´Â °æ¿ì°¡ Àִµ¥ ³ªÁß¿¡ ¶óÀ̺귯¸®¸¦ ¾÷µ¥ÀÌÆ® ÇØ¾ß ÇÒÀÏÀÌ »ý±â°Ô µÇ¸é À§¿Í°°ÀÌ spring.jar ¶ó°í µÇ¾îÀÖÀ¸¸é Áö±Ý Àû¿ëµÇ¾î ÀÖ´Â ¹öÀüÀÌ ¸î ÀÎÁö ¾Ë¼ö°¡ ¾ø½À´Ï´Ù. ±×·¸±â ¶§¹®¿¡ Ç×»ó ¶óÀ̺귯¸® Ãß°¡ÇϽǶ§´Â Ãß°¡ÇϽô ¶óÀ̺귯¸®ÀÇ ¹öÀü ¹øÈ£¸¦ ÆÄÀÏÀ̸§ µÚ¿¡ Ãß°¡ÇÏ´Â ½À°üÀ» µéÀÌ ½Ã´Â°Ô ÁÁ½À´Ï´Ù. 
     ex) spring-2.5.6.jar

4) ÇÁ·ÎÁ§Æ® ¾È¿¡ »ý¼ºµÈ web.xml¿¡ SpringÀ» »ç¿ëÇϱâ À§ÇÑ ¼¼ÆÃÀ» Ãß°¡ÇØ ÁÝ´Ï´Ù.
* Àú´Â Quartz¸¦ »ç¿ëÇϱâ À§ÇÑ ÃÖ¼ÒÇÑÀÇ Spring ¼¼ÆÃÀ» Çسõ¾Ò±â ¶§¹®¿¡ ¼¼Æà ³»¿ëÀÌ ´Ü¼øÇÕ´Ï´Ù. ¸¸¾à À¥ÇÁ·ÎÁ§Æ®¿Í ÇÔ²² Quartz¸¦ »ç¿ëÇϽŴٸé À¥¿¡ ¸Â°Ô ¼³Á¤ÇÏ½Ã°í »ç¿ëÇÏ¼Å¾ß ÇÔÀ» ¾Ë·Áµå¸³´Ï´Ù.^^

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" 	
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 	
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"	id="WebApp_ID" version="2.5">	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>	
	</listener>	
	<context-param>		
		<param-name>contextConfigLocation</param-name>		
		<param-value>/WEB-INF/config/applicationContext*.xml</param-value>
	</context-param>
</web-app>



5) ÄõÃ÷ ¶óÀ̺귯¸®¸¦ ´Ù¿î·Îµå ¹Þ°í ¶óÀ̺귯¸®¸¦ Ãß°¡ÇØ ÁÝ´Ï´Ù.
ÄõÃ÷ ¶óÀ̺귯¸® ´Ù¿î·Îµå ÇϽŴÙÀ½ ¾ÐÃàÀ» Ç®¾î ÁÝ´Ï´Ù.
ÇØ´ç ¶óÀ̺귯¸®¸¦ ÇÁ·ÎÁ§Æ®ÀÇ lib µð·ºÅ丮¿¡ º¹»çÇÏ¿© ³Ö¾îÁÝ´Ï´Ù.
- quartz-all-1.8.3.jar
- ¾ÐÃàǬ lib µð·ºÅ͸®ÀÇ log4j-1.2.14.jar
- ¾ÐÃàǬ lib µð·ºÅ͸®ÀÇ slf4j-api-1.5.10.jar
- ¾ÐÃàǬ lib µð·ºÅ͸®ÀÇ slf4j-log4j12-1.5.10.jar
¸¦ Ãß°¡ ÇØ ÁÝ´Ï´Ù.
¸¶Áö¸·À¸·Î apacheÀÇ commons-logging-1.1.1.jar ¸¦ ´Ù¿î·Îµå Çϼż­ À§¿Í °°ÀÌ ÇÁ·ÎÁ§Æ®ÀÇ lib¿¡ Ãß°¡ÇØÁÖ½Ã¸é ¶óÀ̺귯¸® Ãß°¡´Â ³¡ÀÌ ³³´Ï´Ù.

6) QuartzÀÇ ÇÙ½ÉÀûÀÎ ±â´ÉÀ» ÇÒ /WEB-INF/config/applicationConext.xml À» ÀÛ¼ºÇÕ´Ï´Ù.
½ºÄÉÁì·¯ÀÇ ÇÙ½É ¼¼ÆÃÀº 3°¡Áö Á¤µµ ÀÔ´Ï´Ù.
Çϳª. ½ÇÁ¦ ÁÖ±âÀûÀ¸·Î ½ÇÇàµÉ Ŭ·¡½º µî·Ï
µÑ. ½ºÄÉÁÙ·¯°¡ µ¿ÀÛÇÏ´Â interval time ¼³Á¤
¼Â. ½ÇÁ¦ µ¿ÀÛÇÏ°Ô ²û ¼³Á¤

ÀÌ·± ¼¼°¡Áö°¡ ÀÖ°Ú½À´Ï´Ù.

½ºÄÉÁÙ·¯ µ¿ÀÛ¹æ½Ä¿¡´Â µÎ°¡Áö°¡ Á¸Àç ÇÕ´Ï´Ù.
-Simple : interval timeÀÌ °£´ÜÇÏ°Ô µ¿ÀÛÇÏ´Â ¹æ½ÄÀ¸·Î ¸îÃÊ, ȤÀº ¸îºÐ, ¸î½Ã°£ ´ÜÀ§·Î ÀÛµ¿ÇÏ°í ½ÍÀ»¶§ »ç¿ëÇÕ´Ï´Ù. 
<Simple type setting>

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:p="http://www.springframework.org/schema/p"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans   
                           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<!-- Çϳª.ÁÖ±âÀûÀ¸·Î ½ÇÇàµÉ Ŭ·¡½º ¼³Á¤ -->
	<!-- property nameÀº jobClass·Î fix, value´Â »ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ class ÆÄÀÏ À§Ä¡ -->
	<bean id="simpleQuartzJob" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="net.test.quartz.SimpleQuartzJob"/>
	</bean>

	<!-- µÑ.½ºÄÉÁÙ·¯ÀÇ interval time ¼³Á¤ -->
	<!-- ÄõÃ÷¿¡´Â ¾Æ·¡¿Í °°ÀÌ ¸îÃÊ¿¡ Çѹø¾¿ µ¹°Ô ÇÏ´Â Simple type °ú -->
	<!-- ¹«½¼ ¿äÀÏ ¸î½Ã¿¡ Çѹø¾¿ µ¹°Ô ÇÏ´Â ³¯Â¥·Î ÁöÁ¤ÇÏ´Â Cron type ÀÌ ÀÖ´Ù. -->
	<!-- ÇöÀç´Â Simple typeÀ¸·Î ¼¼Æà -->
	<!-- jobDetailÀº À§¿¡¼­ ¼³Á¤ÇÑ ½ÇÁ¦ µ¿ÀÛÇÒ Å¬·¡½º id¸¦ Àû¾îÁØ´Ù -->
	<!-- startDelay´Â ¼­¹ö ½ÃÀÛÈÄ ¸îÃÊ µÚ¿¡ ½ÃÀÛÇÒÁö ¼¼ÆÃ(ms ´ÜÀ§)  -->
	<!-- repeatIntervalÀº ¸î ÃÊ¿¡ Çѹø¾¿ ½ÇÇàµÉ °ÇÁö ¼¼ÆÃ(ms ´ÜÀ§: ÇöÀç 1ÃÊ) -->
	<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
		<property name="jobDetail" ref="simpleQuartzJob"/>
		<property name="startDelay" value="1000"/>
		<property name="repeatInterval" value="1000"/>
	</bean>
	<!--¼Â. ½ÇÁ¦ µ¿ÀÛÇÏ°Ô²û ¼³Á¤ -->
	<!--ref beanÀº À§¿¡¼­ ¼³Á¤ÇÑ interval time ¾ÆÀ̵𸦠³Ö¾îÁÖ¸é µÊ  -->
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="simpleTrigger"/>
			</list>
		</property>
		<!-- Quartz ½ÇÇà½Ã ¼¼Æà -->
		<property name="quartzProperties">
			<props>
				<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
    			<prop key="org.quartz.threadPool.threadCount">5</prop>
    			<prop key="org.quartz.threadPool.threadPriority">4</prop>
    			<prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
    			<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
			</props>
		</property>
	</bean>
</beans>


-Cron : linux ÀÇ Cron tab °ú °°Àº ¿ªÇÒÀ» Çϴ ŸÀÔ´Ï´Ù. Áï ¸î¿ù, ¸îÀÏ ¸î½Ã¿¡ µ¿ÀÛÇÏ°Ô ÇÏ°í ½ÍÀ¸¸é Cron typeÀ» »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.
<Cron type setting>

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:p="http://www.springframework.org/schema/p"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans   
                           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<!--Çϳª. ÁÖ±âÀûÀ¸·Î ½ÇÇàµÉ Ŭ·¡½º ¼³Á¤ -->
	<bean id="cronQuartzJob" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="net.test.quartz.CronQuartzJob"/>
	</bean>
	
	<!--µÑ. ½ºÄÉÁÙ·¯ÀÇ interval time ¼³Á¤-->
	<!--cronExpressionÀ» ÅëÇؼ­ ½ºÄ³ÁÙ·¯ Áֱ⸦ ¼³Á¤ÇÑ´Ù. -->
	<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="cronQuartzJob"/>
		<property name="cronExpression" value="0/1 * * * * ?"/>
	</bean>
	
	<!--¼Â. ½ÇÁ¦ µ¿ÀÛÇÏ°Ô²û ¼³Á¤ -->
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="cronTrigger"/>
			</list>
		</property>
		<property name="quartzProperties">
			<props>
				<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
    			<prop key="org.quartz.threadPool.threadCount">5</prop>
    			<prop key="org.quartz.threadPool.threadPriority">4</prop>
    			<prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
    			<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
			</props>
		</property>
	</bean>
</beans>



Cron typeÀ» »ç¿ëÇÏ·Á¸é CronExpressionÀ» ¾Ë¾Æ¾ß ÇÕ´Ï´Ù.

*Cron Expression
cron expressionÀÇ °¢°¢ÀÇ Çʵå´Â ´ÙÀ½À» ³ªÅ¸³½´Ù.(¿ÞÂÊ -> ¿À¸¥ÂÊ ¼ø)

 Çʵå À̸§ Çã¿ë °ª Çã¿ëµÈ Ư¼ö ¹®ÀÚ
 Seconds 0 ~ 59 , - * /
 Minutes 0 ~ 59 , - * /
 Hours 0 ~ 23 , - * /
 Day-of-month 1 ~ 31 , - * ? / L W
 Month 1 ~12 or JAN ~ DEC  , - * /
 Day-Of-Week 1 ~ 7 or SUN-SAT , - * ? / L #
 Year (optional) empty, 1970 ~ 2099 , - * /


Cron Expression ÀÇ Æ¯¼ö¹®ÀÚ
'*' : ¸ðµç ¼ö¸¦ ³ªÅ¸³¿. ºÐÀÇ À§Ä¡¿¡ * ¼³Á¤Çϸé "¸Å ºÐ ¸¶´Ù" ¶ó´Â ¶æ.
'?' : day-of-month ¿Í day-of-week Çʵ忡¼­¸¸ »ç¿ë°¡´É. Ưº°ÇÑ °ªÀÌ ¾øÀ½À» ³ªÅ¸³½´Ù.
'-' : "10-12" °ú °°ÀÌ ±â°£À» ¼³Á¤ÇÑ´Ù. ½Ã°£ Çʵ忡 "10-12" À̶ó ÀÔ·ÂÇϸé "10, 11, 12½Ã¿¡ µ¿ÀÛÇϵµ·Ï ¼³Á¤" À̶õ ¶æ.
',' : "MON,WED,FRI"¿Í °°ÀÌ Æ¯Á¤ ½Ã°£À» ¼³Á¤ÇÒ ¶§ »ç¿ëÇÑ´Ù. "MON,WED,FRI" À̸é " '¿ù,¼ö,±Ý' ¿¡¸¸ µ¿ÀÛ" À̶õ ¶æ.
'/' : Áõ°¡¸¦ Ç¥ÇöÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ÃÊ ´ÜÀ§¿¡ "0/15"·Î ¼¼Æà µÇ¾î ÀÖ´Ù¸é "0ÃÊ ºÎÅÍ ½ÃÀÛÇÏ¿© 15ÃÊ ÀÌÈÄ¿¡ µ¿ÀÛ" À̶õ ¶æ.
'L' : day-of-month ¿Í day-of-week Çʵ忡¸¸ »ç¿ëÇÏ¸ç ¸¶Áö¸·³¯À» ³ªÅ¸³À. ¸¸¾à day-of-month ¿¡ "L" ·Î µÇ¾î ÀÖ´Ù¸é À̹ø ´ÞÀÇ ¸¶Áö¸·¿¡ ½ÇÇàÇÏ°Ú´Ù´Â °ÍÀ» ³ªÅ¸³¿.
'W' : day-of-month Çʵ忡¸¸ »ç¿ëµÇ¸ç, ÁÖ¾îÁø ±â°£¿¡ °¡Àå °¡±î¿î ÆòÀÏ(¿ù~±Ý)À» ³ªÅ¸³½´Ù. ¸¸¾à "15W" ÀÌ°í À̹ø ´ÞÀÇ 15ÀÏÀÌ Åä¿äÀÏÀ̶ó¸é °¡Àå°¡±î¿î 14ÀÏ ±Ý¿äÀϳ¯ ½ÇÇàµÈ´Ù. ¶Ç 15ÀÏÀÌ ÀÏ¿äÀÏÀ̶ó¸é °¡Àå °¡±î¿î ÆòÀÏÀÎ 16ÀÏ ¿ù¿äÀÏ¿¡ ½ÇÇàµÇ°Ô µÈ´Ù. ¸¸¾à 15ÀÏÀÌ È­¿äÀÏÀ̶ó¸é È­¿äÀÏÀÎ 15ÀÏ¿¡ ¼öÇàµÈ´Ù.
"LW" : L°ú W¸¦ °áÇÕÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç "LW"´Â "À̹ø´Þ ¸¶Áö¸· ÆòÀÏ"À» ³ªÅ¸³¿
"#" : day-of-week¿¡ »ç¿ëµÈ´Ù. "6#3" À̸é 3(3)¹ø° ÁÖ ±Ý¿äÀÏ(6) À̶õ ¶æÀ̵ȴÙ.1Àº ÀÏ¿äÀÏ ~ 7Àº Åä¿äÀÏ 

 Expression Meaning
 "0 0 12 * * ?" ¸ÅÀÏ 12½Ã¿¡ ½ÇÇà
 "0 15 10 ? * *" ¸ÅÀÏ 10½Ã 15ºÐ¿¡ ½ÇÇà
 "0 15 10 * * ?" ¸ÅÀÏ 10½Ã 15ºÐ¿¡ ½ÇÇà
 "0 15 10 * * ? *" ¸ÅÀÏ 10½Ã 15ºÐ¿¡ ½ÇÇà
 "0 15 10 * * ?  2010"  2010³â µ¿¾È ¸ÅÀÏ 10½Ã 15ºÐ¿¡ ½ÇÇà
 "0 * 14 * * ?" ¸ÅÀÏ 14½Ã¿¡¼­ ½ÃÀÛÇؼ­ 14:59ºÐ ¿¡ ³¡³²
 "0 0/5 14 * * ?" ¸ÅÀÏ 14½Ã¿¡ ½ÃÀÛÇÏ¿© 5ºÐ °£°ÝÀ¸·Î ½ÇÇàµÇ¸ç 14:55ºÐ¿¡ ³¡³²
 "0 0/5 14,18 * * ?" ¸ÅÀÏ 14½Ã¿¡ ½ÃÀÛÇÏ¿© 5ºÐ °£°ÝÀ¸·Î ½ÇÇàµÇ¸ç 14:55ºÐ¿¡ ³¡³ª°í, ¸ÅÀÏ 18½Ã¿¡ ½ÃÀÛÇÏ¿© 5ºÐ°£°ÝÀ¸·Î ½ÇÇàµÇ¸ç 18:55ºÐ¿¡ ³¡³­´Ù.
 "0 0-5 14 * * ?" ¸ÅÀÏ 14½Ã¿¡ ½ÃÀÛÇÏ¿© 14:05 ºÐ¿¡ ³¡³­´Ù.


* ½Ã°£¿¡ ¸ÂÃç µ¹¾Æ°¡´Â ½ºÄÉÁÙ·¯¿¡¼­ ´Ù¸¥ Ŭ·¡½º¸¦ »ç¿ëÇÏ°í ½ÍÀ» ¶§´Â ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÕ´Ï´Ù.

<!-- ½ºÇÁ¸µ DI : »ç¿ëÇÒ Service °´Ã¼¸¦ »ý¼º -->
<bean id="quartzJobService" class="net.test.quartz.service.impl.QuartzJobServiceImpl"/>

<bean id="simpleQuartzJob" class="org.springframework.scheduling.quartz.JobDetailBean">
	<property name="jobClass" value="net.test.quartz.SimpleQuartzJob"/>
	<!-- »ç¿ëÇÏ°íÀÚ ÇÏ´Â classÀÇ bean id¸¦ µî·Ï -->
	<property name="jobDataAsMap">
		<map>
			<entry key="quartzJobService">
				<ref local="quartzJobService"/>
			</entry>
		</map>
	</property>
</bean>


 *µÎ°¡Áö ½ºÄÉÁÙ·¯¸¦ µ¿½Ã¿¡ ½ÇÇà ½Ãų¶§

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	<property name="triggers">
		<!--Æ®¸®°Å¸¦ µÎ°³ »ý¼ºÈÄ ¾Æ·¡¿Í °°ÀÌ ¼¼Æà -->
		<list>
			<ref bean="simpleTrigger"/>
			<ref bean="cronTrigger"/>
		</list>
	</property>
	<property name="quartzProperties">
		<props>
			<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
    			<prop key="org.quartz.threadPool.threadCount">5</prop>
    			<prop key="org.quartz.threadPool.threadPriority">4</prop>
    			<prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
    			<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
		</props>
	</property>
</bean>



7) ½ÇÁ¦ ÀÛµ¿ÇÒ ClassÆÄÀÏ »ý¼º

package net.test.quartz;

import net.test.quartz.service.QuartzJobService;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class SimpleQuartzJob extends QuartzJobBean{
	//½ÇÇàµÉ Ŭ·¡½º´Â ²À QuartzJobBeanÀ» »ó¼Ó¹Þ¾Æ¾ß µÇ¸ç 
	//executeInternal method¸¦ override Çϸé ÀÚµ¿À¸·Î ÀÌ ¸Þ¼Òµå°¡ ½ÇÇà

	//SpringÀÇ DI¸¦ »ç¿ëÇÏ¿© Service°´Ã¼¸¦ setting
	//DI¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é ÇÊ¿ä ¾ø´Â ºÎºÐ
	private QuartzJobService quartzJobService;
	public void setQuartzJobService(QuartzJobService quartzJobService) {
		this.quartzJobService = quartzJobService;
	}


	@Override
	protected void executeInternal(JobExecutionContext ex)throws JobExecutionException {
		quartzJobService.printLog();
	}
	
}



À§¿Í °°Àº ¹æ½ÄÀ¸·Î Spring°ú Quartz¸¦ »ç¿ëÇÏ¿© ½ºÄÉÁÙ·¯¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÇÔ²² ¾÷·Îµå ÇÏ´Â ÆÄÀÏÀº Á¦°¡ Á÷Á¢ ÀÛ¾÷ÇÑ ÇÁ·ÎÁ§Æ®À̱¸¿ä. ÇÔ²² È®ÀÎ ÇØ º¸½Ã¸é ½±°Ô ÄõÃ÷¸¦ »ç¿ëÇϽǼö ÀÖÀ¸½Ç °Ì´Ï´Ù.~^^

SpringQuartz.war