spring 第11天 quartz任务调度

[size=medium][b]Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz[/b]
[/size]

首先说 jar的问题
从Spring3.2.4才开始支持quartz-2.x

如果版本低于 3.2.4 需要导入 quartz-1.x,commons-collections-3.1.jar,jboss-transaction-api_1.1_spec-1.0.0.Final.jar(javax.transaction.UserTransaction.class)

//在java使用quartz

package quartz;

import java.util.Date;

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

/**
* 定义quartz作业类
* 单独 使用quartz
*
*/
public class BuzJob implements Job {
private boolean isRunning=false;

@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
if(!isRunning){
System.out.println(new Date()+" 作业被调度.");
for (int s = 0; s < 100; s++) {
System.out.println("作业完成"+(s+1)+"%");
try {
Thread.sleep(1000);

} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(new Date()+" 作业调度结束.");
}else{
System.out.println(new Date()+" 任务退出");
}
}

}

//test
package quartz;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

/**
* 使用quartz的调度器
* @author Bin
*
*/
public class MyQuartzService {

public static void main(String[] args) {
// TODO Auto-generated method stub
try {
startScheduler();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void startScheduler() throws SchedulerException{
Scheduler sch=StdSchedulerFactory.getDefaultScheduler();

JobDetail d=new JobDetail("buz", Scheduler.DEFAULT_GROUP, BuzJob.class);
//重复调度2次,间隔 60s
Trigger t=new SimpleTrigger("buz", Scheduler.DEFAULT_GROUP, 2, 60000);
sch.scheduleJob(d, t);
sch.start();
}

}




//在spring中使用quartz
[size=medium][b]//使用MethodInvokingJobDetailFactoryBean 可以装配任何普通的bean中方法 不用继承[/b][/size]

package quartz;

public class QuartzJob {

public void work(){
System.out.println("Quartz调度");
}
}


<!-- step:1 定义 quartz业务类-->
<!--定义一个 工作业务类,要做的事情-->
<bean id="quartzjob" class="quartz.QuartzJob"/>

<!-- step:2 对业务类进行详情描述-->
<!--采用 MethodInvokingJobDetailFactoryBean 装配 任务详情 -->
<bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="quartzjob"/>
<property name="targetMethod" value="work"/>
<property name="concurrent" value="false" />
<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
</bean>

<!-- 装配触发器 -->
<bean id="dotime" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobtask"/>
<property name="cronExpression" value="0 * 20 * * ?"/>
</bean>

<!-- 配置一个线程执行器,用于任务注册 -->
<bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10"/>
<property name="maxPoolSize" value="100"/>
<property name="queueCapacity" value="500"/>
</bean>

<!-- step:4 将触发器 交给调度工厂 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="cronTriggerPunch"/>
<ref local="dotime"/>
<ref local="cronTriggerPunch1"/>
</list>
</property>
<property name="taskExecutor" ref="executor"/>
<property name="autoStartup" value="true"/>
<property name="startupDelay" value="60"/>
</bean>


[size=medium][b]//使用JobDetailBean装配 业务[/b][/size]

package quartz;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

import annotation.model.interfaces.Dog;

public class PunchJob extends QuartzJobBean {

private boolean isRunning=false;

private Dog dog;
public void setDog(Dog dog) {
this.dog = dog;
}

@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
// TODO Auto-generated method stub
if(!isRunning){
System.out.println("开始工作");
dog.sound();
isRunning=false;
}
}

}


<!--step:3 对已经详情描述过的bean,装配给 触发器 -->
<bean id="cronTriggerPunch" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 采用嵌套类 bean-->
<property name="jobDetail">
<!--使用JobDetailBean 装配任务详情 -->
<bean class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="quartz.PunchJob"/>
<property name="jobDataAsMap">
<map>
<entry key="dog" value-ref="bagong"/>
</map>
</property>
</bean>
</property>
<property name="cronExpression" value="0 0/1 * * * ?"/>
</bean>

<!-- PunchJob1:m没有采用 嵌套bean -->
<bean id="punchjobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="quartz.PunchJob1"/>
<property name="jobDataAsMap">
<map>
<entry key="dog" value-ref="rifle"/>
</map>
</property>
</bean>

<bean id="cronTriggerPunch1" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="punchjobDetail"/>
<property name="cronExpression" value="0 0/1 * * * ?"/>
</bean>


<!-- step:4 将触发器 交给调度工厂 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="cronTriggerPunch"/>
<ref local="dotime"/>
<ref local="cronTriggerPunch1"/>
</list>
</property>
<property name="taskExecutor" ref="executor"/>
<property name="autoStartup" value="true"/>
<property name="startupDelay" value="60"/>
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值