oracle trigger 延迟执行_spring+springMVC+mybatis集成Quartz框架(Oracle版本)

本文介绍了如何将Quartz定时任务框架集成到Spring、SpringMVC和Mybatis的项目中,特别是在Oracle数据库环境下。文章涵盖了数据库表设计、序列设置、Quartz工具类、控制器、服务、实现类、Mapper及XML文件的详细内容,并展示了如何在Tomcat启动时加载数据库中的任务。
摘要由CSDN通过智能技术生成

说明

本文基于大佬的非maven版脚手架增加的功能,大佬的脚手架是MySQL版本的,并且不再更新了,我对它进行了数据库移植,在下篇文章我会写出Oracle的移植相关细节。大佬的脚手架地址:Arthur/irs,我引入了quartz.jar,关于spring和springmvc+mybatis的配置不详细说,运用了mybatis的generator生成相关的后台代码,前台代码就不写了。

界面展示

2831df98a5b87497dd692bd0b424afec.png

数据库表设计

bd71c99d007f5f2d0018d520fe5d0842.png

JOB_ID设置为主键

数据序列

create sequence SEQ_TB_JOBS
minvalue 1
maxvalue 9999999999999999999999999999
start with 25
increment by 1
cache 20;

Quartz工具类

public class QuartzManagerUtil {
	private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();

	/**
	 * @Description 添加一个定时任务
	 * 
	 * @param jobName
	 *            任务名
	 * @param jobGroupName
	 *            任务组名
	 * @param triggerName
	 *            触发器名
	 * @param triggerGroupName
	 *            触发器组名
	 * @param jobClass
	 *            任务
	 * @param cron
	 *            事件表达式
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName,
			Class jobClass, String cron) {
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();

			// 任务名,任务组,任务执行类
			JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();
			// 触发器
			TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
			// 触发器名,触发器组
			triggerBuilder.withIdentity(triggerName, triggerGroupName);
			triggerBuilder.startNow();
			// 触发器时间设定
			triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
			// 创建Trigger对象
			CronTrigger trigger = (CronTrigger) triggerBuilder.build();
			// 调度容器设置jobDetail和Trigger
			scheduler.scheduleJob(jobDetail, trigger);
			// 启动
			if (!scheduler.isShutdown()) {
				scheduler.start();
			}
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @Description: 修改一个任务的触发时间
	 * 
	 * @param jobName
	 *            任务名
	 * @param jobGroupName
	 *            任务组名
	 * @param triggerName
	 *            触发器名
	 * @param triggerGroupName
	 *            触发器组名
	 * @param cron
	 *            时间表达式
	 */
	public static void modifyJobCron(String jobName, String jobGroupName, String triggerName, String triggerGroupName,
			String cron) {
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
			CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
			if (cronTrigger == null) {
				return;
			}
			String oldTime = cronTrigger.getCronExpression();
			if (!oldTime.equalsIgnoreCase(cron)) {
				/** 方式一:调用 rescheduleJob开始 */
				// 触发器
				TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
				// 触发器名,触发器组
				triggerBuilder.withIdentity(triggerName, triggerGroupName);
				triggerBuilder.startNow();
				// 触发器时间设定
				triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
				// 创建Trigger对象
				cronTrigger = (CronTrigger) triggerBuilder.build();
				// 修改一个任务的触发器时间
				scheduler.rescheduleJob(triggerKey, cronTrigger);

				/** 方法二:先删除,然后创建一个新的job */
				/*
				 * JobDetail jobDetail =
				 * scheduler.getJobDetail(JobKey.jobKey(jobName, jobGroupName));
				 * Class<? extends Job> jobClass = jobDetail.getJobClass();
				 * removeJob(jobName, jobGroupName, triggerName,
				 * triggerGroupName); addJob(jobName, jobGroupName, triggerName,
				 * triggerGroupName, jobClass, cron);
				 */

			}

		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @Description 删除一个任务
	 * 
	 * @param jobName
	 *            任务名
	 * @param jobGroupName
	 *            任务组名
	 * @param triggerName
	 *            触发器名
	 * @param triggerGroupName
	 *            触发器组名
	 */
	public static void deleteJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName) {
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
			scheduler.pauseTrigger(triggerKey);// 停止触发器
			scheduler.unscheduleJob(triggerKey);// 移除触发器
			scheduler.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 删除任务
		} catch (SchedulerException e) {
			e.printStackTrace();
		}

	}

	/**
	 * @Description 停用所有任务
	 *
	 */
	public static void pauseAllJob() {
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.pauseAll();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}

	}

	/**
	 * @Description 启用所有任务
	 */
	public static void resumeAll(){
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.resumeAll();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
		
	}

	/**
	 * @Description 停用某个任务
	 * 
	 * @param jobName
	 *            任务名
	 * @param jobGroupName
	 *            任务组名
	 */
	public static void pauseJob(String jobName, String jobGroupName) {
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.pauseJob(JobKey.jobKey(jobName, jobGroupName));
		} catch (SchedulerException e) {
			e.printStackTrace();
		}

	}

	/**
	 * @Description 启用某个任务
	 * @param jobName
	 *            任务名
	 * @param jobGroupName
	 *            任务组名
	 */
	public static void resumeJob(String jobName, String jobGroupName) {
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.resumeJob(JobKey.jobKey(jobName, jobGroupName));
		} catch (SchedulerException e) {
			e.printStackTrace();
		}

	}
	
	/**
	 * 关闭所有任务
	 */
	public static void shutDownAll(){
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			if(!scheduler.isShutdown()){
				scheduler.shutdown();
			}
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 启动所有任务
	 */
	public static void startAll(){
		try {
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.start();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 立即运行一次任务
	 */
	public static void runOnce(String jobName, String jobGroupN
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值