Quartz_2.2.X学习系列十八:Example 6 - Dealing with Job Exceptions

本文介绍了Quartz_2.2_X中如何处理Job执行时可能出现的异常。建议在Job类中使用try...catch结构,避免抛出异常导致任务无限循环。如果出现异常,可以在catch块中修正错误数据并重新触发Job,或者通过抛出JobExecutionException取消所有关联Trigger,防止异常再次发生。
摘要由CSDN通过智能技术生成

No job is perfect. See how you can let the scheduler know how to deal with exceptions that are thrown by your job

要点:

在执行Job的时候,有可能会发现异常,对于这情况我们如何处理?

1.必须要在Job类型使用try…..catch,而不要抛出异常,因为抛出异常会造成任务一直循环执行。

2.遇到异常后,在catch中修改产生异常的数据为正常(即不会再产生异常)到JobDataMap中,并让Job马上重新触发一次,让任务不再抛异常,任务执行结束。

3.遇到异常后,将该Job关联的所有Trigger的scheduler全部取消(通过抛JobExecutionException异常实现),使该Job不会再被触发,避免异常。

 

------------------------------------------------------------------------------------------------------------

/*

 * All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved.

 *

 * Licensed under the Apache License, Version 2.0 (the "License"); you may not

 * use this file except in compliance with the License. You may obtain a copy

 * of the License at

 *

 *   http://www.apache.org/licenses/LICENSE-2.0

 *  

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT

 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the

 * License for the specific language governing permissions and limitations

 * under the License.

 *

 */

 

package org.quartz.examples.example6;

 

import org.quartz.DisallowConcurrentExecution;

import org.quartz.Job;

import org.quartz.JobDataMap;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.quartz.JobKey;

import org.quartz.PersistJobDataAfterExecution;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

import java.util.Date;

 

/**

 * <p>

 * A job dumb job that will throw a job execution exception

 * </p>

 *

 * @author Bill Kratzer

 */

@PersistJobDataAfterExecution

@DisallowConcurrentExecution

public class BadJob1 implements Job {

 

  // Logging

  private static Logger _log = LoggerFactory.getLogger(BadJob1.class);

  private int calculation;

 

  /**

   * Empty public constructor for job initialization

   */

  public BadJob1() {

  }

 

  /**

   * <p>

   * Called by the <code>{@link org.quartz.Scheduler}</code> when a <code>{@link org.quartz.Trigger}</code> fires that

   * is associated with the <code>Job</code>.

   * </p>

   *

   * @throws JobExecutionException if there is an exception while executing the job.

   */

  public void execute(JobExecutionContext context) throws JobExecutionException {

    JobKey jobKey = context.getJobDetail().getKey();

    JobDataMap dataMap = context.getJobDetail().getJobDataMap();

 

    int denominator = dataMap.getInt("denominator");

    _log.info("---" + jobKey + " executing at " + new Date() + " with denominator " + denominator);

 

    // a contrived example of an exception that

    // will be generated by this job due to a

    // divide by zero error (only on first run)

    try {

      calculation = 4815 / deno

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值