quartz 并发多任务怎么设置多任务

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&Spring+ quartz
之 多任务动态定时(任务中伏任务) - 编程当前位置:& &&&Spring+ quartz
之 多任务动态定时(任务中伏任务)Spring+ quartz
之 多任务动态定时(任务中伏任务)&&网友分享于:&&浏览:165次Spring+ quartz
之 多任务动态定时(任务中起任务)
参见上一篇Spring+ quartz 多任务定时 执行 与cronExpression表达式 可以知道如何设置多个规则的定时任务,但有时需要客户自己设置指定的时间来启动新的任务处理不同的事情。
实现方式:用户在前台自行维护任务列表和任务执行时间,后台将任务执行时间解析成对应的cronexpression后与任务列表一起保存到数据库中。在 服务器运行期间添加的任务通过验证的(quartz会验证cronexpression是否合法以及对应时间是否已经过期)将直接添加一个任务以及触发器。
简而言之,就是自己创建一个新的jobdetail ---新的 Trigger 指定行的定时规则--启动新增定时器任务
(执行完新任务可以选择取消新的任务)
这里实现的思路是:按照定时规则扫描用户设置的任务开始时间,如定时发短信,有定时的就发出去。
1、首先加入定时规则扫描的任务,
package net.nilm61.timeT
import java.text.DateF
import java.text.SimpleDateF
import java.util.D
import java.util.L
import java.util.L
import javax.persistence.EntityM
import javax.persistence.EntityManagerF
import net.nilm61.entity.R
import net.nilm61.service.RepayS
import org.quartz.CronT
import org.quartz.JobD
import org.quartz.JobExecutionC
import org.quartz.JobExecutionE
import org.quartz.S
import org.quartz.SchedulerE
import org.springframework.context.ApplicationC
import org.springframework.orm.jpa.EntityManagerH
import org.springframework.scheduling.quartz.QuartzJobB
import org.springframework.transaction.support.TransactionSynchronizationM
public class AutoRepayBidTask extends QuartzJobBean{
private RepayService repayS
public void setRepayService(RepayService repayService) {
this.repayService = repayS
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
EntityManagerFactory emf =
EntityManager em =
//System.out.println("Start!!!!!!!!!");
scheduler = context.getScheduler();
ApplicationContext ac = (ApplicationContext)scheduler.getContext().get("theScheduler");
emf = (EntityManagerFactory) ac.getBean("entityManagerFactory", EntityManagerFactory.class);
em = emf.createEntityManager();
TransactionSynchronizationManager.bindResource(emf, new EntityManagerHolder(em));
RepayService repayService = (RepayService)ac.getBean("recordService");
setRepayService(repayService);
doBiz(scheduler);
}catch(Exception e){
e.printStackTrace();
//logger.error(e.getMessage());
//System.out.println("over!!!!!!!!!!!!!!!!!");
if(em!=null){
em.close();
private void doBiz(Scheduler scheduler) {
List&Repay&
repays = repayService.getByAutoRepay();
//从数据库中查询定时处理的条目
if(repays != null && repays.size() &0){
DateFormat df = new SimpleDateFormat("ss mm HH dd MM ? yyyy ",Locale.ENGLISH);
for(Repay repay : repays){
actualTime =repay.getActualTime();
if(actualTime != null){
cronExpression = df.format(actualTime);
//新建任务,任务组为默认的Scheduler.DEFAULT_GROUP,需要执行的任务类为DoBiz4TestTask.class
JobDetail jobDetail =
new JobDetail("AutoRepayBidsJob_" + repay.getId(), Scheduler.DEFAULT_GROUP,
DoBiz4TestTask.class);
CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(
"AutoRepayBidsTrigger_"+repay.getId(), Scheduler.DEFAULT_GROUP);
if(cronTrigger == null){
//新建触发器,触发器为默认的Scheduler.DEFAULT_GROUP
cronTrigger = new CronTrigger("AutoRepayBidsTrigger_" + repay.getId(), Scheduler.DEFAULT_GROUP);
//为触发器设置定时表达式
cronTrigger.setCronExpression(cronExpression);
System.out.println(cronExpression);
//启动新增定时器任务
scheduler.scheduleJob(jobDetail, cronTrigger);
}catch(SchedulerException e){
//启动验证失败,设置任务标记为禁用
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
2.增加DoBiz4TestTask (具体执行的定时任务)
所有的触发器执行的任务类均为DoBiz4TestTask.class,DoBiz4TestTask 需要实现接口:org.quartz.Job中的方法execute方法,这里继承的是org.quartz.Job的子类org.springframework.scheduling.quartz.QuartzJobBean 参考代码如下
package net.nilm61.timeT
import javax.persistence.EntityM
import javax.persistence.EntityManagerF
import org.quartz.JobExecutionC
import org.quartz.JobExecutionE
import org.quartz.S
import org.quartz.T
import org.springframework.context.ApplicationC
import org.springframework.orm.jpa.EntityManagerH
import org.springframework.scheduling.quartz.QuartzJobB
import org.springframework.transaction.support.TransactionSynchronizationM
public class DoBiz4TestTask extends QuartzJobBean{
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
EntityManagerFactory emf =
EntityManager em =
scheduler = context.getScheduler();
ApplicationContext ac = (ApplicationContext)scheduler.getContext().get("theScheduler");
Trigger trigger = context.getTrigger();
emf = (EntityManagerFactory) ac.getBean("entityManagerFactory", EntityManagerFactory.class);
em = emf.createEntityManager();
TransactionSynchronizationManager.bindResource(emf, new EntityManagerHolder(em));
doBiz(scheduler,trigger);
}catch(Exception e){
e.printStackTrace();
//logger.error(e.getMessage());
if(em!=null){
em.close();
private void doBiz(Scheduler
scheduler,Trigger trigger) {
//获取触发器名称
String triggerName = trigger.getName();
//根据触发器名称得到对应的任务Id
Integer id = Integer.valueOf(triggerName.split("_")[1]);
//处理指定的任务
//TODO: ...
System.out.println("triggerName === "+triggerName);
//根据触发器名称得到对应的任务Id
if(null != trigger){
//执行完移除该任务
scheduler.unscheduleJob(trigger.getName(), trigger.getGroup());
}catch(Exception e){
e.printStackTrace();
3.配置文件中加入
&bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"&
&property name="jobClass" value="net.nilm61.timeTask.DoAutoRepayBidTask"/&
&!-- &property name="jobDataMap" &&/property& --&
&bean id="DoBiz4TestTask" class="org.springframework.scheduling.quartz.JobDetailBean"&
&property name="jobClass" value="net.nilm61.timeTask.DoBiz4TestTask"/&
&!-- &property name="jobDataMap" &&/property& --&
&bean id="AutoRepayTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"&
&property name="jobDetail" ref="jobDetail"/&
&property name="cronExpression" value="0 0/1 14-18 * * ?"/&
&bean id="DoBiz4TestTaskss" class="org.springframework.scheduling.quartz.CronTriggerBean"&
&property name="jobDetail" ref="DoBiz4TestTask"/&
&bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&
&property name="triggers"&
&ref bean="AutoRepayTrigger"/&
&/property&
&property name="applicationContextSchedulerContextKey"&
&value&theScheduler&/value&
&/property&
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有public class Test_1 {
public Scheduler createScheduler() throws Exception {
SchedulerFactory sf = new StdSchedulerFactory(&Quartz.properties&);
Scheduler scheduler = sf.getScheduler();
scheduler.scheduleJob(createJobDetail_1(), createCronTrigger_1());
[color=#FF0000]// 下面这一行,是我添加的另外一个作用的调度计划,问题就出在这[/color]
scheduler.scheduleJob(createJobDetail_2(), createCronTrigger_2());
private JobDetail createJobDetail_1() {
JobDetail job = new JobDetail(DemoJob_1.class.getName(),
Scheduler.DEFAULT_GROUP, DemoJob_1.class);
private CronTrigger createCronTrigger_1() throws
CronTrigger trigger = new org.quartz.CronTrigger(&DEFAULT&, null);
trigger.setJobName(DemoJob_1.class.getName());
trigger.setCronExpression(& 0/5 * * * * ? &);
private JobDetail createJobDetail_2() {
JobDetail job = new JobDetail(DemoJob_2.class.getName(),
Scheduler.DEFAULT_GROUP, DemoJob_2.class);
private CronTrigger createCronTrigger_2() throws ParseException {
CronTrigger trigger = new org.quartz.CronTrigger(&DEFAULT&, null);
trigger.setJobName(DemoJob_2.class.getName());
trigger.setCronExpression(& 0/15 * * * * ? &);
public class DemoJob_1 implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println(&DemoJob_1 demo output :& + new Date());
public class DemoJob_2 implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println(&DemoJob_2 demo output :& + new Date());
public class DemoTest {
public static void main(String [] args) throws SchedulerException, Exception{
Test_1 test_1 = new Test_1();
test_1.createScheduler().start();
执行的时候,抛出异常: &main& org.quartz.ObjectAlreadyExistsException: Unable to store Trigger with name: 'DEFAULT' and group: 'DEFAULT', because one already exists with this identification.有一个定时功能需要用到Quartz,刚学Quartz,忘大家帮忙!------解决方案--------------------
哈哈!分给我吧!我脸皮比较厚!!!
------解决方案--------------------
http://www.java2000.net/p1643Spring管理的定时器
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有Quartz插件怎么设置?_百度知道随时选购服务
需求发布后1小时内收到服务商响应每个需求平均有10个服务商参与95%以上的需求得到了圆满解决所有需求不向雇主收取任何佣金流量暴涨,转化飙升,销量翻倍
已收到 6 个服务商的文案稿件
, 最终中标并完成需求
有相似问题想解决?专业顾问来帮助您
通过猪八戒网实名认证,保证身份真实可靠
完成手机认证,保证能随时联系到服务商
参与需求,开始赚钱
第1步:提交您的稿件
第2步:中标后交付作品
第3步:获得赏金
该需求下的优秀交稿
TA的交稿:
熟悉配置,可以很快定位问题
TA的交稿:
让我来做这个吧!
TA的交稿:
我已经知道你的bug是什么问题,请回复我的qq}

我要回帖

更多关于 quartz 多任务调度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信