定时任务,要引入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>