您的位置:首页 > 编程语言 > Java开发

quartz,spring-quartz,spring-task,spring-schedule

2017-12-05 10:29 441 查看

介绍 quartz,spring-quartz,spring-task,spring-schedule

一:quartz

quartz是一个调度器,可以放任务进去,对任务指定时间执行。

demo如下

1.0 maven依赖

<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>


1.1

在CLASSPATH下创建 quartz.properties 文件
#指定了调度器名字
org.quartz.scheduler.instanceName = MyScheduler
#线程池最大线程数量
org.quartz.threadPool.threadCount = 3
#指定调度器存储任务的方式,这个是存储在内存中。
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore


1.2 job

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class HelloJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println(123);
}
}

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzTest {
public static void main(String[] args) throws SchedulerException {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startNow()
.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")).build();
scheduler.scheduleJob(job, trigger);
//关闭调度器
//scheduler.shutdown();
}
}


二:spring-quartz

spring-quartz只是spring对quartz的一个包装而已。其实现是在spring-context-support中。

如果是固定的任务,可以使用xml配置,包括以下都需要在xml中配置

org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

org.springframework.scheduling.quartz.JobDetailFactoryBean

org.springframework.scheduling.quartz.JobDetailFactoryBean

org.springframework.scheduling.quartz.SimpleTriggerFactoryBean

org.springframework.scheduling.quartz.CronTriggerFactoryBean

核心 org.springframework.scheduling.quartz.SchedulerFactoryBean

以上这些相互依赖,共同组成调度任务。

如果是做动态的调度则

核心是:

<bean id="quartzScheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
<property name="configLocation" value="classpath:quartz.properties" />
<!--应用启动完后 QuartzScheduler 再启动 -->
<property name="startupDelay" value="0" />
</bean>


java引入

@Autowired
private org.quartz.Scheduler scheduler;
这个时候,就可以使用该接口的所有方法


三:spring-task

spring-task完全是spring自己的调度实现,其代码是在spring-context中,有2种方式1种是xml,另一种是注解形式。spring-task也支持cron表达式

3.1

spring.xml头部依赖

xmlns:task=”http://www.springframework.org/schema/task”

http://www.springframework.org/schema/task

http://www.springframework.org/schema/task/spring-task-3.0.xsd

xml配置

<task:scheduled-tasks>
<!-- taskJob是一个service类,job1是方法,-->
<task:scheduled ref="taskJob" method="job1" cron="*/2 * * * * ?"/>
</task:scheduled-tasks>


java代码如下

@Service//(默认的serviceName是taskJob)
public class TaskJob {
public void job1() {
System.out.println("任务进行中。。。");
}
}


3.2 注解

注解任务的java代码是

@Component("taskJobAnno")
public class TaskJobAnno {

@Scheduled(cron = "*/2 * * * * ?")
public void job1() {
System.out.println("注解任务进行中。。。");
}
}


xml配置:注意这里的xml也需要引入xmlns头信息

<task:annotation-driven scheduler="qbScheduler" mode="proxy"/>
<task:scheduler id="qbScheduler" pool-size="10"/>


四:spring-schedule

spring-schedule就是spring-task

spring-quartz和spring-task区别

1

2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: