public class AppTest {
public static void main(String[] args) {
// 定义每隔 2 秒执行一次任务
int second = 2;
Timer timer = new Timer();
// 就只有一个方法,这个方法的第一个参数是继承了 TimerTask 的对象
// 第 2 个参数是第 1 次运行经过的时间
// 第 3 个参数是每一次运行任务的间隔时间
timer.schedule(new MyTimeTask(), 5 * 1000, second * 1000);
}
private static class MyTimeTask extends TimerTask {
@Override
public void run() {
System.out.println("我是任务调度中的代码,循环执行。。。");
}
}
}
Quartz 的基本使用(2015年11月学习微信开发使用)
参考资料:http://www.cnblogs.com/kay/archive/2007/11/02/947372.html
1、 pom.xml 代码片段
(1)spring 须要三个模块:core、tx、context-support。
注意:tx 模块不要忘记添加,并且 quartz
的版本也很重要,如果版本错误,则功能很难实现。
(2)quartz :来自 org.quartz-scheduler。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
2、写一个任务调度的普通 Java 类
public class QuartzJob {
public void dosomething() {
// Quartz 的任务调度
System.out.println("开始周期性地循环执行任务。。。。");
}
}
3、编写 Spring 核心配置代码
(1)定义任务调度的工作类(程序员自定义的一个 Java 类);
(2)定义调用的对象和调用的方法,使用 MethodInvokingJobDetailFactoryBean
这个类来定义,注意包名是:org.springframework.scheduling.quartz
(3)定义触发的时间,重点是定义 Cron 表达式,使用 CronTriggerFactoryBean
(4)定义一个总管理类,使用 SchedulerFactoryBean
,注意这里设置懒加载为 false,不要自动装配。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd">
<beans>
<!-- 要调用的工作类 -->
<bean id="quartzjob" class="com.liwei.quartz.QuartzJob"></bean>
<!-- 定义调用的对象和调用对象的方法 -->
<bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="quartzjob"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<!-- 这个方法是一个字符串 -->
<value>dosomething</value>
</property>
</bean>
<!-- 定义触发时间 ,重点在于 Cron 表达式 -->
<bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="jobtask"/>
</property>
<property name="cronExpression">
<value>0/2 * * * * ?</value>
</property>
</bean>
<!-- 总管理类,将 lazy-init 设置为 false ,在容器启动的时候就会执行调度程序 ,将 autowire 设置为 no -->
<bean id="startQuartz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="doTime"/>
</list>
</property>
</bean>
</beans>
</beans>
4、编写测试代码
public class Main {
private static AbstractApplicationContext ctx;
public static void main(String[] args) {
ctx = new ClassPathXmlApplicationContext("quartz.xml");
// ctx.destroy();
}
}
Cron 表达式学习资料:
http://www.cnblogs.com/yanweidie/p/3537144.html
下面这篇文章也讲得比较详细:
Quartz 中时间参数说明 即 Cron 表达式
http://www.cnblogs.com/chinafine/articles/1773389.html
Cron 表达式生成器:
http://jason.hahuachou.com/cron/index.htm