推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

基于实例并发访问的3.6应用方法

   2023-06-18 网络整理佚名2530
核心提示:.Job的接口,是中的核心任务接口,要实现自定义的定时任务(就是我们要执行的业务动作/作业)只需要实现此接口。.,触发器用来告诉调度程序作业什么时候触发,也就是我们要设置任务触发的条件。这是因为任务是有可能并发执行,如果直接使用Job,就会存在对同一个Job实例并发访问的问题。方式,每次执行,都会根据创建一个新的Job实例,这样就可以规避并发访问的问题。Cron表达式任务配置:

目录

1.定时任务实现方法Timer和三方框架注解实现(@,@) 2.表达式

3、实现定时任务 3.1 任务/工作(Task/Job)

位于 org..Job 中的接口是 .job 中的核心任务接口。 实现一个自定义的定时任务(也就是我们要执行的业务/job),只需要实现这个接口即可。 也可以继承实现类。 重新在 () 方法里面。

3.2 触发器()

位于org..中,用于告诉作业什么时候被触发,也就是我们要设置任务触发的条件。 提供了五种触发器类型,但最常用的两种是 .

五种类型(触发器):

,,, r 和 。

3.3 调度器()

From org.. 是主界面,代表一个独立运行的容器。 调度程序维护触发器的注册表。 注册后,调度器负责在其关联的触发器触发时(当它们的预定时间到达时)执行作业。不难看出,其功能是将任务作业与触发器作业结合起来

3.4 任务执行上下文()

位于org..中的类是任务执行时注入的对象,用于保存任务的详细信息(如触发器、调度器、工作详情、任务入参等),我们可以得到任务在运行时通过这个对象数据,它也可以接受动态参数。

3.5. 任务详情()

位于org..中,用于绑定job,为job提供一些属性:

为什么要设计成 + Job 而不是直接使用 Job 呢?

定义了任务数据,真正的执行逻辑在Job中。

这是因为任务可以并发执行。 如果直接使用Job,会出现并发访问同一个Job实例的问题。 在&Job模式下,每次执行都会创建一个新的Job实例,这样就可以避免并发访问的问题。

3.6 应用演示

任务:

public class QuartzTask extends QuartzJobBean {
    // 这种可以注入
	@Autowired
	private QuartzTaskController quartzTaskController;
    // 这里不能注入Controller ?????
	
	@Override
	protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
		this.quartzTaskController.updateVectorParcelNumber();
	}
}

简单的任务配置:

@Configuration
public class QuzrtzTaskConfiguration {
	@Value("${cron}")
	private  String cron;
	@Bean
	public  JobDetail getSimpleJobDetail() {
		return JobBuilder.newJob(QuartzTask.class)
				.storeDurably()
				.build();
	}
	@Bean
	public Trigger getSimpleTrigger() {
		SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
		simpleScheduleBuilder.withIntervalInMinutes(20)
				.repeatForever();
		return TriggerBuilder.newTrigger()
				.forJob(getSimpleJobDetail())
				.withIdentity("testSimpleScheduleBuilder")
				.withSchedule(simpleScheduleBuilder)
                .startNow() // 立即执行定时任务
				.build();
	}
}

Cron 表达式任务配置:

@Configuration
public class QuzrtzTaskConfiguration {
	@Value("${cron}")
	private  String cron;
	
	@Bean
	public JobDetail getCronJobDetail() {
		return JobBuilder.newJob(QuartzTask.class)
				.withIdentity("ModifyVectorParcelNumberTask")
				.storeDurably()
				.build();
	}
	
	@Bean
	public Trigger getCronTrigger() {
		//CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 59/10 * * * ? *");
		CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(this.cron);
		return TriggerBuilder.newTrigger()
				.forJob(getCronJobDetail())
				.withIdentity("testCronScheduleBuild")
				.withSchedule(cronScheduleBuilder)
				//.startNow() StartNow 应该只适用于 SimpleTrigger 触发器。
				.build();
	}
}

 
标签: 触发器
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON