基於文章: http://gong1208.iteye.com/blog/1773177 java
第二種 方式spring
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean併發
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean.net
這兩個類分別對應spring支持的兩種實現任務調度的方式,即前文提到到java自帶的timer task方式和Quartz方式。這裏我只寫MethodInvokingJobDetailFactoryBean的用法,使用該類的好處是,咱們的任務類再也不須要繼承自任何類,而是普通的pojo。code
<!-- 定時器 - 定時發送催款消息任務配置 --> <!-- 配置類方法id --> <bean id="messageQuartz" class="org.springframework.scheduling.quartz .MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <!-- targetObject指定任務類 --> <bean class="com.tsou.jar.product.task.SendMessageController" /> </property> <property name="targetMethod" value="sendMessage" /> <property name="concurrent" value="false" /><!-- 做業不併發調度 --> <!-- 第一種SimpleTriggerBean,只支持按照必定頻度調用任務,如每隔30分鐘運行一次。 --> <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="messageQuartz" /> <property name="startDelay" value="0" /><!-- 調度工廠實例化後,通過0秒開始執行調度 --> <property name="repeatInterval" value="2000" /><!-- 每2秒調度一次 --> </bean> <!-- 第二種CronTriggerBean,支持到指定時間運行一次,如天天12:00運行一次等。 --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="messageQuartz" /> <!-- 天天12:00運行一次 --> <property name="cronExpression" value="0 0 11 * * ?" /> </bean> <!-- 配置調度工程執行代碼 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger" /> <ref bean="simpleTrigger" /> </list> </property> </bean>
但我這裏不使用以上方法,而是採用更簡單的Spring-Task ;component
Spring3.0之後自帶的task,能夠將它當作一個輕量級的Quartz,並且使用起來比Quartz簡單許多。xml
準備 springXML文件中需添加以上2個聲明blog
1.編寫執行代碼類繼承
注意@Service 寫法, 在xml中,ref注入相對應的javaService名get
@Service public class SendMessageService { Logger log = Logger.getLogger(SendMessageService.class); public void sendMessage() { log.info("不繼承QuartzJobBean方式-調度進行中..."); } }
2.xml配置
注意base-package是掃描的包,ref是service名,method則是方法;多個則寫多個task-scheduled
<context:component-scan base-package="com.tsou.jar.product.task" /> <task:scheduled-tasks> <!-- 發送消息——天天2分鐘執行一次方法 --> <task:scheduled ref="sendMessageService" method="sendMessage" cron="0 0/2 * * * ?"/> </task:scheduled-tasks>
3.java類
好了定時執行完成;
CRON表達式 含義
"0 0 12 * * ?" 天天中午十二點觸發
"0 15 10 ? * *" 天天早上10:15觸發
"0 15 10 * * ?" 天天早上10:15觸發
"0 15 10 * * ? *" 天天早上10:15觸發
"0 15 10 * * ? 2005" 2005年的天天早上10:15觸發
"0 * 14 * * ?" 天天從下午2點開始到2點59分每分鐘一次觸發
"0 0/5 14 * * ?" 天天從下午2點開始到2:55分結束每5分鐘一次觸發
"0 0/5 14,18 * * ?" 天天的下午2點至2:55和6點至6點55分兩個時間段內每5分鐘一次觸發
"0 0-5 14 * * ?" 天天14:00至14:05每分鐘一次觸發
"0 10,44 14 ? 3 WED" 三月的每週三的14:10和14:44觸發
"0 15 10 ? * MON-FRI" 每一個周1、周2、周3、周4、週五的10:15觸發