Quartz中的2个实用的注解

使用过Quartz的兄弟都知道,如果需要编写一个Quartz任务可以实现org.quartz.Job的接口,然后根据自己的业务需求重写execute方法。

public class MyJob implements Job {
	@Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
		//业务
	}
}

然而在某些情况下我们可能需要一些全局的参数,它能在整个MyJob的生命周期内提供存取服务。通常情况下我们会将这样的参数存储在JobDataMap中,如下:

public class MyJob implements Job {
	@Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
		JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
		String name = jobDataMap.get("name");
		if (name == null) {
			jobDataMap.put("name", "小明");
		}
	}
}

可能我们还希望每次更新JobDataMap后,下一次Job执行能够获取到JobDataMap更新后的数据。
Quartz个我们提供了一个注解==@PersistJobDataAfterExecution==,它能够让MyJob在执行成功后,更新JobDataMap,使得MyJob在下一次执行后你能获取更新后的数据。通常情况下这个注解还要配合==@DisallowConcurrentExecution==使用,它使得同一时刻只允许执行一个MyJob实例。因为当同一个Job的多个实例在并发执行的情况下可能导致JobDataMap的数据是不确定的。使用如下:

@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class MyJob implements Job {
	@Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
		JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
		// 第一次执行成功后count=0,第二次执行成功后count=1。。。
		Integer count = jobDataMap.get("count");
		if (name == null) {
			count = 0;
			jobDataMap.put("count", count);
		} else {
			jobDataMap.put("count", count+1)
		}
	}
}

你可能感兴趣的:(学习笔录,Java,quartz)