Quartz 执行不同的java class

 首先执行的class 需要继承 QuartzJobBean 这个类,我这个是一个抽象类,先继承了QuartzJobBean 然后其他需要执行的class再继承他,我只是加了一个执行前执行后需要执行的方法。

package xxxxx.batchjob.job;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.quartz.QuartzJobBean;

public abstract class TestJobTemlate extends QuartzJobBean {
	
    private final Logger log = LoggerFactory.getLogger(TestJobTemlate .class);

	protected abstract void preExecute();
	protected abstract void postExecute();
	protected abstract void executeTestJob(JobExecutionContext context) throws JobExecutionException;
	
	@Override
    public final void executeInternal(JobExecutionContext context) throws JobExecutionException{
		preExecuteInternal();
		executeTestJob(context);
		postExecuteInternal();
	}
	
	public final void preExecuteInternal() {
		log.info("Execute job :"+this.getClass().getName() + " Start >>>>>>>>>>>>>>");
		preExecute();
	}
	
	public final void postExecuteInternal() {
		postExecute();
		log.info("Execute job :"+this.getClass().getName() + " End >>>>>>>>>>>>>>");
	}
			
}

需要执行的java class 继承我们自定义好的类,再重写定义好的方法,在 executeTestJob 里面写需要执行的代码就可以了,preExecute 写执行代码之前需要执行的操作,postExecute 写执行代码之后需要执行的操作。加不加DisallowConcurrentExecution的区别就是,cron时间到了之后是否等待上一次job执行完成,加了就不会等待,cron时间一到就执行,不加的话会等待。

package xxxx.batchjob.job;

import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;

@DisallowConcurrentExecution
public class TestJob extends TestJobTemlate {


    @Override
    protected void preExecute() {
        // TODO Auto-generated method stub

    }

    @Override
    protected void postExecute() {
        // TODO Auto-generated method stub

    }

    @Override
    protected void executeTestJob(JobExecutionContext context) {
        // need axecute function
       
       }

    }
}

最后在jobBuilder build job的时候把class放进去就可以了。 当然这个class name可以从front-end传过来的,我这里只是hardcode而已

Class cls=(Class<? extends Job>) Class.forName("xxxx.batchjob.Testjob")
JobBuilder.newJob(cls).withIdentity(jobKey).withDescription(description).setJobData(map).storeDurably().build();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Quartz是一个开源的Java调度框架,由一个社区维护和支持。它可以用来实现在指定的时间或时间间隔触发任务执行的功能。Quartz支持多种方式的作业调度,包括基于日期、时间间隔和Cron表达式的调度。使用Quartz框架可以方便地实现定时任务、日志处理、数据备份等功能。它是Java应用程序中常用的调度框架之一,并且在大规模部署时可以实现高可靠性、高可用性和可伸缩性。在使用Quartz框架时,可以创建一个作业(Job)并定义其执行逻辑,然后将作业与触发器(Trigger)关联起来,通过调度器(Scheduler)进行调度。当触发器条件满足时,Quartz调用相关的作业执行相应的任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [java中简单实用Quartz](https://blog.csdn.net/a13407142317/article/details/129037032)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Java 实现定时任务的四种方式](https://blog.csdn.net/Zhang_Zippor/article/details/53024146)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值