定時任務,要引入quartz-xx.jar包,可以自己搞,也可和spring框架整合一起搞。
// 定時任務的異步操作
@Component("xxTask")
public class XxTask implements Runnable {
public void run() {..}
}
// 定時任務
@Component("xxWorker")
public class XxWorker {
@Resource(name = "myXxTask")
private MyXxTask task;
// 線程池,一次裝6個線程
private ExecutorService tp = Executors.newFixedThreadPool(6);
public void doWorker() {
正常任務
// 異步任務
tp.execute(task);
..
}
}
<beans>
// 配置定時任務
<bean id="xxJob" class="....MethodInvokingJobDetailFactoryBean">
// 任務bean
<property name="targetObject">
<ref bean="myXxWorker" />
</property>
// 任務方法
<property name="targetMethod">
<value>doWorker</value>
</property>
</bean>
// 配置觸發器
<bean id="xxWorkerTrigger" class="....CronTriggerBean">
<property name="jobDetail">
<ref bean="xxJob" />
</property>
// cron表達式,設置任務的觸發時間
// 表達式由6或7個域組成,域間用空格間隔,依次爲秒、分、時、月的第幾天、月、星期、年
// 最後的年一般不用,月的第幾天和星期只有一個起作用,設置一個後,另一個用?代替
<property name="cronExpression">
// 每天每時每分的10、15、20秒的時候觸發任務
<value>10,15,20 * * * * ?</value>
</property>
</bean>
// 開關定時任務
<bean id="xxTaskQuartz" class="....SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="xxWorkerTrigger" />
</list>
</property>
<property name="autoStartup">
// 自動開啓設爲false,根據條件在外部手動開關worker
<value>false</value>
</property>
</bean>
</beans>