转摘 https://blog.csdn.net/qwe6112071/article/details/50999386

因为通过Bean配置生成的JobDetail和CronTrigger或SimpleTrigger不能被序列化,因而不能持久化到数据库中,如果需要用

持久化任务调度,需要编程式创建Quartz的Job等相关实现类

1、spring容器配置参数

<bean id="quartzDataSource" class="org.springframework.jdbc.datasource.DriverManagerDatasource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/quartz" />
<property name="username" value="xxx" />
<property name="password" value="xxx" />
</bean> <!--quartz持久化存储-->
<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
<property name="dataSource">
<ref bean="quartzDataSource" />
</property>
<property name="applicationContextSchedulerContextKey" value="applicationContext" />
<property name="quartzProperties" >
<props>
<!--JobStore配置-->
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<!--数据表设置-->
<prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
<prop key="org.quartz.jobStore.dataSource">myDatasource</prop>
</props>
</property>
</bean>

测试类

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.ObjectAlreadyExistsException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class pickNewsJob implements Job { @Override
public void execute(JobExecutionContext jec) throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
System.out.println("在" + sdf.format(new Date()) + "更新日志");
} public static void main(String args[]) throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(pickNewsJob.class)
.withIdentity("job1", "jgroup1").build();
SimpleTrigger simpleTrigger = TriggerBuilder
.newTrigger()
.withIdentity("trigger1")
.withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(10, 2)).startNow()
.build();
try{
ApplicationContext ac = new ClassPathXmlApplicationContext("spring/spring-task.xml");
Scheduler scheduler = (Scheduler) ac.getBean("quartzScheduler");
scheduler.scheduleJob(jobDetail, simpleTrigger);
scheduler.start();
}catch ( ObjectAlreadyExistsException e) {
resumeJob();
}
}
/**
*根据数据库中的记录 恢复异常中断的任务
*/
public static void resumeJob() throws SchedulerException {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// ①获取调度器中所有的触发器组
List<String> triggerGroups = scheduler.getTriggerGroupNames();
// ②重新恢复在tgroup1组中,名为trigger1触发器的运行
for (int i = 0; i < triggerGroups.size(); i++) {
List<String> triggers = scheduler.getTriggerGroupNames();
for (int j = 0; j < triggers.size(); j++) {
Trigger tg = scheduler.getTrigger(new TriggerKey(triggers
.get(j), triggerGroups.get(i)));
// ②-1:根据名称判断
if (tg instanceof SimpleTrigger
&& tg.getDescription().equals("jgroup1.DEFAULT")) {//由于我们之前测试没有设置触发器所在组,所以默认为DEFAULT
// ②-1:恢复运行
scheduler.resumeJob(new JobKey(triggers.get(j),
triggerGroups.get(i)));
}
}
}
scheduler.start(); }
}

最新文章

  1. Map拷贝 关于对象深拷贝 浅拷贝的问题
  2. Calculator(1.5)
  3. 第五章 springboot + mybatis(转载)
  4. 编程实践中C语言的一些常见细节
  5. SQL语句的简单使用
  6. CSS3系列三(与背景边框相关样式 、变形处理、动画效果)
  7. 設定 Bootstrap/SASS/Bower/gulp (Windows平台)
  8. Android 设置让EditText不自动获取焦点
  9. python下线程以及锁
  10. 开源Math.NET基础数学类库使用(05)C#解析Delimited Formats数据格式
  11. Java 代码性能优化
  12. 二叉树的最大深度算法面试题-leetcode学习之旅(3)
  13. MongoDB的导入与导出
  14. 面向对象内置方法之--__str__、__call__、__del__
  15. Unity日常记录 - QualitySettings 性能设置
  16. springBoot 项目war包部署及改为war包后资源路径错误问题
  17. JMH实践-代码性能测试工具
  18. R语言线性回归
  19. [转].net reactor 学习系列(五)---源代码加密程序
  20. centos 安装 ffmpeg

热门文章

  1. PL/SQL 条件控制
  2. php中魔术方法有什么用
  3. 使用PHPExcel操作Excel用法实例分析
  4. Spring JDBCTemplate 简单使用
  5. day11—前端学习之我不想看书
  6. Schema 与数据类型优化
  7. CentOS7.4伪分布式搭建 hadoop+zookeeper+hbase+opentsdb
  8. 怎么查看keras 或者 tensorflow 正在使用的GPU
  9. Naive Bayes Algorithm And Laplace Smoothing
  10. java注解编程@since 1.8