Quartz 时间任务调度器
上官网:http://www.quartz-scheduler.org/ 下载最新的java包
还有一个问题就是,Spring3.1以下的版本才能用quartz1.X的版本, Spring3.1以上的版本才能用quartz2.X的版本,这是由于其中内部冲突问题,没有去详细的了解。
maven的加载jar包方式,现在都是比较用的多maven来管理jar包的
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.5</version>
</dependency>
//创建一个main函数来执行程序,执行的是QuartzTaskFactory.class这个类,定义的是每隔5秒执行一次这个函数
public class QuartzDemo {
public static void main(String[] args) {
try {
//初始化一个Schedule工厂
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
//通过schedule工厂类获得一个Scheduler类
Scheduler scheduler = schedulerFactory.getScheduler();
//通过设置job name, job group, and executable job class初始化一个JobDetail
JobDetail jobDetail = JobBuilder.newJob(QuartzTaskFactory.class).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("simple")
.withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ?")) //每隔5秒执行一次
.startNow()
.build();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
创建一个类,实现Job接口
public class QuartzTaskFactory implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
try {
System.out.println("任务运行...");
// ApplicationContext ctx = new ClassPathXmlApplicationContext("quartz-task.xml");
JobDataMap jobDataMap = arg0.getJobDetail().getJobDataMap();
Integer count = (Integer) jobDataMap.get("count");
if(count==null){
count=0;
}
count++;
System.out.println("11fsdfsds"+count);
//在这里执行你的任务...
} catch (Exception e) {
e.printStackTrace();
}
}
}
Markdown及扩展
上面只是一个简单的实例,也可以在spring xml文件中配置
在spring配置,当程序在运行的时候,会每隔自己定义的时间执行一次,
<bean id="testJob" class="com.QuartzTaskFactory" />
<bean id="testJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 指定任务类 -->
<property name="targetObject" ref="testJob" />
<!--指定任务执行的方法-->
<property name="targetMethod" value="execute" />
<!-- 下面为也可以不实现Job接口,具体详细自己实现 -->
<property name="targetObject">
<ref bean="testJob"/>
</property>
<property name="targetMethod">
<value>execute</value>
</property>
</bean>
<bean id="testJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="testJobDetail" />
每隔20秒执行一次
<property name="cronExpression" value="0/20 * * * * ?" />
<!-- 每隔4分钟执行一次 -->
<!--<property name="cronExpression" value="0 */4 * * * ?" />-->
</bean>
<bean id="sfb" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="testJobTrigger" />
</list>
</property>
</bean>
后面我将实现自己定义时间,根据自己定义时间来执行程序