spring boot bean配置:

  1. @Configuration
  2. public class QuartzConfig {
  3.  
  4. @Value("${quartz.scheduler.instanceName}")
  5. private String quartzInstanceName;
  6.  
  7. @Value("${org.quartz.dataSource.myDS.driver}")
  8. private String myDSDriver;
  9.  
  10. @Value("${org.quartz.dataSource.myDS.URL}")
  11. private String myDSURL;
  12.  
  13. @Value("${org.quartz.dataSource.myDS.user}")
  14. private String myDSUser;
  15.  
  16. @Value("${org.quartz.dataSource.myDS.password}")
  17. private String myDSPassword;
  18.  
  19. @Value("${org.quartz.dataSource.myDS.maxConnections}")
  20. private String myDSMaxConnections;
  21.  
  22. /**
  23. * 设置属性
  24. * @return
  25. * @throws IOException
  26. */
  27. private Properties quartzProperties() throws IOException {
  28. Properties prop = new Properties();
  29. prop.put("quartz.scheduler.instanceName", quartzInstanceName);
  30. prop.put("org.quartz.scheduler.instanceId", "AUTO");
  31. prop.put("org.quartz.scheduler.skipUpdateCheck", "true");
  32. prop.put("org.quartz.scheduler.jmx.export", "true");
  33.  
  34. prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
  35. prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
  36. prop.put("org.quartz.jobStore.dataSource", "quartzDataSource");
  37. prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
  38. prop.put("org.quartz.jobStore.isClustered", "true");
  39.  
  40. prop.put("org.quartz.jobStore.clusterCheckinInterval", "20000");
  41. prop.put("org.quartz.jobStore.dataSource", "myDS");
  42. prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");
  43. prop.put("org.quartz.jobStore.misfireThreshold", "120000");
  44. prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true");
  45. prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE");
  46.  
  47. prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
  48. prop.put("org.quartz.threadPool.threadCount", "10");
  49. prop.put("org.quartz.threadPool.threadPriority", "5");
  50. prop.put("org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread", "true");
  51.  
  52. prop.put("org.quartz.dataSource.myDS.driver", myDSDriver);
  53. prop.put("org.quartz.dataSource.myDS.URL", myDSURL);
  54. prop.put("org.quartz.dataSource.myDS.user", myDSUser);
  55. prop.put("org.quartz.dataSource.myDS.password", myDSPassword);
  56. System.out.println("myDSMaxConnections:" + myDSMaxConnections);
  57. prop.put("org.quartz.dataSource.myDS.maxConnections", myDSMaxConnections);
  58.  
  59. prop.put("org.quartz.plugin.triggHistory.class", "org.quartz.plugins.history.LoggingJobHistoryPlugin");
  60. prop.put("org.quartz.plugin.shutdownhook.class", "org.quartz.plugins.management.ShutdownHookPlugin");
  61. prop.put("org.quartz.plugin.shutdownhook.cleanShutdown", "true");
  62. return prop;
  63. }
  64.  
  65. @Bean
  66. public SchedulerFactoryBean schedulerFactoryBean(@Qualifier("dialogJobTrigger") Trigger cronJobTrigger) throws IOException {
  67. SchedulerFactoryBean factory = new SchedulerFactoryBean();
  68. // this allows to update triggers in DB when updating settings in config file:
  69. //用于quartz集群,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
  70. factory.setOverwriteExistingJobs(true);
  71. //用于quartz集群,加载quartz数据源
  72. //factory.setDataSource(dataSource);
  73. //QuartzScheduler 延时启动,应用启动完10秒后 QuartzScheduler 再启动
  74. factory.setStartupDelay(10);
  75. //用于quartz集群,加载quartz数据源配置
  76. factory.setQuartzProperties(quartzProperties());
  77. factory.setAutoStartup(true);
  78. factory.setApplicationContextSchedulerContextKey("applicationContext");
  79. //注册触发器
  80. factory.setTriggers(cronJobTrigger);
         //直接使用配置文件
  81. // factory.setConfigLocation(new FileSystemResource(this.getClass().getResource("/quartz.properties").getPath()));
  82. return factory;
  83. }
  84.  
  85. /**
  86. * 加载job
  87. * @return
  88. */
  89. @Bean
  90. public JobDetailFactoryBean updateDialogStatusJobDetail() {
  91. return createJobDetail(InvokingJobDetailDetailFactory.class, "updateDialogStatusGroup", "dialogJob");
  92. }
  93.  
  94. /**
  95. * 加载触发器
  96. * @param jobDetail
  97. * @return
  98. */
  99. @Bean(name = "dialogJobTrigger")
  100. public CronTriggerFactoryBean dialogStatusJobTrigger(@Qualifier("updateDialogStatusJobDetail") JobDetail jobDetail) {
  101. return dialogStatusTrigger(jobDetail, "0 0 0/1 * * ?");
  102. }
  103.  
  104. /**
  105. * 创建job工厂
  106. * @param jobClass
  107. * @param groupName
  108. * @param targetObject
  109. * @return
  110. */
  111. private static JobDetailFactoryBean createJobDetail(Class<?> jobClass, String groupName, String targetObject) {
  112. JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
  113. factoryBean.setJobClass(jobClass);
  114. factoryBean.setDurability(true);
  115. factoryBean.setRequestsRecovery(true);
  116. factoryBean.setGroup(groupName);
  117. Map<String, String> map = new HashMap<>();
  118. map.put("targetObject", targetObject);
  119. map.put("targetMethod", "execute");
  120. factoryBean.setJobDataAsMap(map);
  121. return factoryBean;
  122. }
  123.  
  124. /**
  125. * 创建触发器工厂
  126. * @param jobDetail
  127. * @param cronExpression
  128. * @return
  129. */
  130. private static CronTriggerFactoryBean dialogStatusTrigger(JobDetail jobDetail, String cronExpression) {
  131. CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
  132. factoryBean.setJobDetail(jobDetail);
  133. factoryBean.setCronExpression (cronExpression);
  134. return factoryBean;
  135. }
  136.  
  137. }

  

  1. InvokingJobDetailDetailFactory对象:
  1. public class InvokingJobDetailDetailFactory extends QuartzJobBean{
  2.  
  3. // 计划任务所在类
  4. private String targetObject;
  5.  
  6. // 具体需要执行的计划任务
  7. private String targetMethod;
  8.  
  9. private ApplicationContext ctx;
  10.  
  11. @Override
  12. protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
  13. try {
  14. Object otargetObject = ctx.getBean(targetObject);
  15. Method m = null;
  16. try {
  17. m = otargetObject.getClass().getMethod(targetMethod);
  18. m.invoke(otargetObject);
  19. } catch (SecurityException e) {
  20. e.printStackTrace();
  21. } catch (NoSuchMethodException e) {
  22. e.printStackTrace();
  23. }
  24. } catch (Exception e) {
  25. throw new JobExecutionException(e);
  26. }
  27. }
  28.  
  29. public void setApplicationContext(ApplicationContext applicationContext) {
  30. this.ctx = applicationContext;
  31. }
  32.  
  33. public void setTargetObject(String targetObject) {
  34. this.targetObject = targetObject;
  35. }
  36.  
  37. public void setTargetMethod(String targetMethod) {
  38. this.targetMethod = targetMethod;
  39. }
  40. }

 备注:set方法不能少,setApplicationContext中的applicationContext与factory.setApplicationContextSchedulerContextKey("applicationContext")填入的值有关,其原理由InvokingJobDetailDetailFactory父类中的BeanWrapper实现。

sql脚本:--

  1. -- 表的结构 `qrtz_blob_triggers`
  2. --
  3. CREATE TABLE IF NOT EXISTS `qrtz_blob_triggers` (
  4. `SCHED_NAME` varchar(120) NOT NULL,
  5. `TRIGGER_NAME` varchar(120) NOT NULL,
  6. `TRIGGER_GROUP` varchar(120) NOT NULL,
  7. `BLOB_DATA` blob
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  9. -- --------------------------------------------------------
  10. --
  11. -- 表的结构 `qrtz_calendars`
  12. --
  13. CREATE TABLE IF NOT EXISTS `qrtz_calendars` (
  14. `SCHED_NAME` varchar(120) NOT NULL,
  15. `CALENDAR_NAME` varchar(120) NOT NULL,
  16. `CALENDAR` blob NOT NULL
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  18. -- --------------------------------------------------------
  19. --
  20. -- 表的结构 `qrtz_cron_triggers`
  21. --
  22. CREATE TABLE IF NOT EXISTS `qrtz_cron_triggers` (
  23. `SCHED_NAME` varchar(120) NOT NULL,
  24. `TRIGGER_NAME` varchar(120) NOT NULL,
  25. `TRIGGER_GROUP` varchar(120) NOT NULL,
  26. `CRON_EXPRESSION` varchar(120) NOT NULL,
  27. `TIME_ZONE_ID` varchar(80) DEFAULT NULL
  28. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  29. -- --------------------------------------------------------
  30. --
  31. -- 表的结构 `qrtz_fired_triggers`
  32. --
  33. CREATE TABLE IF NOT EXISTS `qrtz_fired_triggers` (
  34. `SCHED_NAME` varchar(120) NOT NULL,
  35. `ENTRY_ID` varchar(95) NOT NULL,
  36. `TRIGGER_NAME` varchar(120) NOT NULL,
  37. `TRIGGER_GROUP` varchar(120) NOT NULL,
  38. `INSTANCE_NAME` varchar(120) NOT NULL,
  39. `FIRED_TIME` bigint(13) NOT NULL,
  40. `SCHED_TIME` bigint(13) NOT NULL,
  41. `PRIORITY` int(11) NOT NULL,
  42. `STATE` varchar(16) NOT NULL,
  43. `JOB_NAME` varchar(120) DEFAULT NULL,
  44. `JOB_GROUP` varchar(120) DEFAULT NULL,
  45. `IS_NONCONCURRENT` varchar(1) DEFAULT NULL,
  46. `REQUESTS_RECOVERY` varchar(1) DEFAULT NULL
  47. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  48. -- --------------------------------------------------------
  49. --
  50. -- 表的结构 `qrtz_job_details`
  51. --
  52. CREATE TABLE IF NOT EXISTS `qrtz_job_details` (
  53. `SCHED_NAME` varchar(120) NOT NULL,
  54. `JOB_NAME` varchar(120) NOT NULL,
  55. `JOB_GROUP` varchar(120) NOT NULL,
  56. `DESCRIPTION` varchar(250) DEFAULT NULL,
  57. `JOB_CLASS_NAME` varchar(250) NOT NULL,
  58. `IS_DURABLE` varchar(1) NOT NULL,
  59. `IS_NONCONCURRENT` varchar(1) NOT NULL,
  60. `IS_UPDATE_DATA` varchar(1) NOT NULL,
  61. `REQUESTS_RECOVERY` varchar(1) NOT NULL,
  62. `JOB_DATA` blob
  63. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  64. -- --------------------------------------------------------
  65. --
  66. -- 表的结构 `qrtz_locks`
  67. --
  68. CREATE TABLE IF NOT EXISTS `qrtz_locks` (
  69. `SCHED_NAME` varchar(120) NOT NULL,
  70. `LOCK_NAME` varchar(40) NOT NULL
  71. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  72. -- --------------------------------------------------------
  73. --
  74. -- 表的结构 `qrtz_paused_trigger_grps`
  75. --
  76. CREATE TABLE IF NOT EXISTS `qrtz_paused_trigger_grps` (
  77. `SCHED_NAME` varchar(120) NOT NULL,
  78. `TRIGGER_GROUP` varchar(120) NOT NULL
  79. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  80. -- --------------------------------------------------------
  81. --
  82. -- 表的结构 `qrtz_scheduler_state`
  83. --
  84. CREATE TABLE IF NOT EXISTS `qrtz_scheduler_state` (
  85. `SCHED_NAME` varchar(120) NOT NULL,
  86. `INSTANCE_NAME` varchar(120) NOT NULL,
  87. `LAST_CHECKIN_TIME` bigint(13) NOT NULL,
  88. `CHECKIN_INTERVAL` bigint(13) NOT NULL
  89. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  90. -- --------------------------------------------------------
  91. --
  92. -- 表的结构 `qrtz_simple_triggers`
  93. --
  94. CREATE TABLE IF NOT EXISTS `qrtz_simple_triggers` (
  95. `SCHED_NAME` varchar(120) NOT NULL,
  96. `TRIGGER_NAME` varchar(120) NOT NULL,
  97. `TRIGGER_GROUP` varchar(120) NOT NULL,
  98. `REPEAT_COUNT` bigint(7) NOT NULL,
  99. `REPEAT_INTERVAL` bigint(12) NOT NULL,
  100. `TIMES_TRIGGERED` bigint(10) NOT NULL
  101. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  102. -- --------------------------------------------------------
  103. --
  104. -- 表的结构 `qrtz_simprop_triggers`
  105. --
  106. CREATE TABLE IF NOT EXISTS `qrtz_simprop_triggers` (
  107. `SCHED_NAME` varchar(120) NOT NULL,
  108. `TRIGGER_NAME` varchar(120) NOT NULL,
  109. `TRIGGER_GROUP` varchar(120) NOT NULL,
  110. `STR_PROP_1` varchar(512) DEFAULT NULL,
  111. `STR_PROP_2` varchar(512) DEFAULT NULL,
  112. `STR_PROP_3` varchar(512) DEFAULT NULL,
  113. `INT_PROP_1` int(11) DEFAULT NULL,
  114. `INT_PROP_2` int(11) DEFAULT NULL,
  115. `LONG_PROP_1` bigint(20) DEFAULT NULL,
  116. `LONG_PROP_2` bigint(20) DEFAULT NULL,
  117. `DEC_PROP_1` decimal(13,4) DEFAULT NULL,
  118. `DEC_PROP_2` decimal(13,4) DEFAULT NULL,
  119. `BOOL_PROP_1` varchar(1) DEFAULT NULL,
  120. `BOOL_PROP_2` varchar(1) DEFAULT NULL
  121. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  122. -- --------------------------------------------------------
  123. --
  124. -- 表的结构 `qrtz_triggers`
  125. --
  126. CREATE TABLE IF NOT EXISTS `qrtz_triggers` (
  127. `SCHED_NAME` varchar(120) NOT NULL,
  128. `TRIGGER_NAME` varchar(120) NOT NULL,
  129. `TRIGGER_GROUP` varchar(120) NOT NULL,
  130. `JOB_NAME` varchar(120) NOT NULL,
  131. `JOB_GROUP` varchar(120) NOT NULL,
  132. `DESCRIPTION` varchar(250) DEFAULT NULL,
  133. `NEXT_FIRE_TIME` bigint(13) DEFAULT NULL,
  134. `PREV_FIRE_TIME` bigint(13) DEFAULT NULL,
  135. `PRIORITY` int(11) DEFAULT NULL,
  136. `TRIGGER_STATE` varchar(16) NOT NULL,
  137. `TRIGGER_TYPE` varchar(8) NOT NULL,
  138. `START_TIME` bigint(13) NOT NULL,
  139. `END_TIME` bigint(13) DEFAULT NULL,
  140. `CALENDAR_NAME` varchar(200) DEFAULT NULL,
  141. `MISFIRE_INSTR` smallint(2) DEFAULT NULL,
  142. `JOB_DATA` blob
  143. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  144. --
  145. -- Indexes for dumped tables
  146. --
  147. --
  148. -- Indexes for table `qrtz_blob_triggers`
  149. --
  150. ALTER TABLE `qrtz_blob_triggers`
  151. ADD PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),
  152. ADD KEY `SCHED_NAME` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`);
  153. --
  154. -- Indexes for table `qrtz_calendars`
  155. --
  156. ALTER TABLE `qrtz_calendars`
  157. ADD PRIMARY KEY (`SCHED_NAME`,`CALENDAR_NAME`);
  158. --
  159. -- Indexes for table `qrtz_cron_triggers`
  160. --
  161. ALTER TABLE `qrtz_cron_triggers`
  162. ADD PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`);
  163. --
  164. -- Indexes for table `qrtz_fired_triggers`
  165. --
  166. ALTER TABLE `qrtz_fired_triggers`
  167. ADD PRIMARY KEY (`SCHED_NAME`,`ENTRY_ID`),
  168. ADD KEY `IDX_QRTZ_FT_TRIG_INST_NAME` (`SCHED_NAME`,`INSTANCE_NAME`),
  169. ADD KEY `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY` (`SCHED_NAME`,`INSTANCE_NAME`,`REQUESTS_RECOVERY`),
  170. ADD KEY `IDX_QRTZ_FT_J_G` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`),
  171. ADD KEY `IDX_QRTZ_FT_JG` (`SCHED_NAME`,`JOB_GROUP`),
  172. ADD KEY `IDX_QRTZ_FT_T_G` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),
  173. ADD KEY `IDX_QRTZ_FT_TG` (`SCHED_NAME`,`TRIGGER_GROUP`);
  174. --
  175. -- Indexes for table `qrtz_job_details`
  176. --
  177. ALTER TABLE `qrtz_job_details`
  178. ADD PRIMARY KEY (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`),
  179. ADD KEY `IDX_QRTZ_J_REQ_RECOVERY` (`SCHED_NAME`,`REQUESTS_RECOVERY`),
  180. ADD KEY `IDX_QRTZ_J_GRP` (`SCHED_NAME`,`JOB_GROUP`);
  181. --
  182. -- Indexes for table `qrtz_locks`
  183. --
  184. ALTER TABLE `qrtz_locks`
  185. ADD PRIMARY KEY (`SCHED_NAME`,`LOCK_NAME`);
  186. --
  187. -- Indexes for table `qrtz_paused_trigger_grps`
  188. --
  189. ALTER TABLE `qrtz_paused_trigger_grps`
  190. ADD PRIMARY KEY (`SCHED_NAME`,`TRIGGER_GROUP`);
  191. --
  192. -- Indexes for table `qrtz_scheduler_state`
  193. --
  194. ALTER TABLE `qrtz_scheduler_state`
  195. ADD PRIMARY KEY (`SCHED_NAME`,`INSTANCE_NAME`);
  196. --
  197. -- Indexes for table `qrtz_simple_triggers`
  198. --
  199. ALTER TABLE `qrtz_simple_triggers`
  200. ADD PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`);
  201. --
  202. -- Indexes for table `qrtz_simprop_triggers`
  203. --
  204. ALTER TABLE `qrtz_simprop_triggers`
  205. ADD PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`);
  206. --
  207. -- Indexes for table `qrtz_triggers`
  208. --
  209. ALTER TABLE `qrtz_triggers`
  210. ADD PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),
  211. ADD KEY `IDX_QRTZ_T_J` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`),
  212. ADD KEY `IDX_QRTZ_T_JG` (`SCHED_NAME`,`JOB_GROUP`),
  213. ADD KEY `IDX_QRTZ_T_C` (`SCHED_NAME`,`CALENDAR_NAME`(191)),
  214. ADD KEY `IDX_QRTZ_T_G` (`SCHED_NAME`,`TRIGGER_GROUP`),
  215. ADD KEY `IDX_QRTZ_T_STATE` (`SCHED_NAME`,`TRIGGER_STATE`),
  216. ADD KEY `IDX_QRTZ_T_N_STATE` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`),
  217. ADD KEY `IDX_QRTZ_T_N_G_STATE` (`SCHED_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`),
  218. ADD KEY `IDX_QRTZ_T_NEXT_FIRE_TIME` (`SCHED_NAME`,`NEXT_FIRE_TIME`),
  219. ADD KEY `IDX_QRTZ_T_NFT_ST` (`SCHED_NAME`,`TRIGGER_STATE`,`NEXT_FIRE_TIME`),
  220. ADD KEY `IDX_QRTZ_T_NFT_MISFIRE` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`),
  221. ADD KEY `IDX_QRTZ_T_NFT_ST_MISFIRE` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`,`TRIGGER_STATE`),
  222. ADD KEY `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`,`TRIGGER_GROUP`,`TRIGGER_STATE`);
  223. --
  224. -- 限制导出的表
  225. --
  226. --
  227. -- 限制表 `qrtz_blob_triggers`
  228. --
  229. ALTER TABLE `qrtz_blob_triggers`
  230. ADD CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`);
  231. --
  232. -- 限制表 `qrtz_cron_triggers`
  233. --
  234. ALTER TABLE `qrtz_cron_triggers`
  235. ADD CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`);
  236. --
  237. -- 限制表 `qrtz_simple_triggers`
  238. --
  239. ALTER TABLE `qrtz_simple_triggers`
  240. ADD CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`);
  241. --
  242. -- 限制表 `qrtz_simprop_triggers`
  243. --
  244. ALTER TABLE `qrtz_simprop_triggers`
  245. ADD CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`);
  246. --
  247. -- 限制表 `qrtz_triggers`
  248. --
  249. ALTER TABLE `qrtz_triggers`
  250. ADD CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`);

quartz集群实现原理,利用数据库记录job行为,并通过锁机制,使job在同一次中仅运行一次。

JobBean示例

  1. //需要交由spring管理
    @Service("dialogJob")
  2. public class DialogJob {
  3.  
  4. @Autowired
  5. private QuestionService questionService;

  6. // 方法名在quartz定义
  7. public void execute() throws Exception{
  8. //具体执行业务
        questionService.XXXXX();
  9. }
  10.  
  11. }

spring boot + quartz 集群的更多相关文章

  1. Spring集成quartz集群配置总结

    1.spring-quartz.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE be ...

  2. 搭建高可用rabbitmq集群及spring boot实现集群配置

    java spring boot配置: //具体参看了配置的源码 org.springframework.boot.autoconfigure.amqp.RabbitProperties //Rabb ...

  3. spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】

    最近做了一个spring boot 整合 quartz  实现 动态定时任务配置,在集群环境下运行的 任务.能够对定时任务,动态的进行增删改查,界面效果图如下: 1. 在项目中引入jar 2. 将需要 ...

  4. Spring Boot Quartz 分布式集群任务调度实现

    Spring Boot Quartz 主要内容 Spring Scheduler 框架 Quartz 框架,功能强大,配置灵活 Quartz 集群 mysql 持久化定时任务脚本(tables_mys ...

  5. (4) Spring中定时任务Quartz集群配置学习

    原 来配置的Quartz是通过spring配置文件生效的,发现在非集群式的服务器上运行良好,但是将工程部署到水平集群服务器上去后改定时功能不能正常运 行,没有任何错误日志,于是从jar包.JDK版本. ...

  6. Spring+quartz集群配置,Spring定时任务集群,quartz定时任务集群

    Spring+quartz集群配置,Spring定时任务集群,quartz定时任务集群 >>>>>>>>>>>>>> ...

  7. Spring+Quartz集群环境下定时调度的解决方案

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  8. Spring+Quartz 集群

    这几天给Spring+Quartz的集群折腾得死去活来,google了无数页总算搞定,记下一些要点备以后使用. 单独的Quartz集群在http://unmi.blogjava.net/有Unmi翻译 ...

  9. Spring+quartz集群解决多服务器部署定时器重复执行的问题

    一.问题描述 Spring自带的Task虽然能很好使用定时任务,只需要做些简单的配置就可以了.不过如果部署在多台服务器上的时候,这样定时任务会在每台服务器都会执行,造成重复执行. 二.解决方案 Spr ...

随机推荐

  1. GDAL书籍中删除数据勘误(C#语言)

    GDAL书籍中关于C#版本删除数据的时候,不能完全删除数据,由于我对C#不了解导致代码有点问题,非常感谢@Bingoyin指出并给出修改方案.此外对于栅格图像的删除.重命名,矢量数据的删除和重命名都有 ...

  2. 【Unity Shaders】ShadowGun系列之一——飞机坠毁的浓烟效果

    写在前面 最近一直在思考下面的学习该怎么进行,当然自己有在一边做项目一边学OpenGL,偶尔翻翻论文之类的.但是,写shader是一个需要实战和动手经验的过程,而模仿是前期学习的必经之路.很多人都会问 ...

  3. 步步为营---- MuleEsb学习(一) 扫盲篇

    本篇文章是基于不断的接触GXPT之后,对其技术开始不断的积累学习^^^,有很多问题带给我了思考,对于如何的处理各个部分的流程?这个如何处理?太多的问题促使着我一步一步的学习,在师哥们的指导下,逐步的清 ...

  4. TDD实践感悟

    每个开发者都想开发出高质量的代码,更少的Bug.更容易维护不仅让人心情愉悦,也让我们有更多时间去学习和生活. 少加一些班,多陪家人,:) 当开发任务非常简单时,比如基本的增删改查,可能使用怎样的方式开 ...

  5. Scipy教程 - 优化和拟合库scipy.optimize

    http://blog.csdn.net/pipisorry/article/details/51106570 最优化函数库Optimization 优化是找到最小值或等式的数值解的问题.scipy. ...

  6. UNIX环境高级编程——互斥量属性

    互斥量具有一些属性,通过修改这些属性可以控制锁的一些行为.缺省的互斥锁属性及其值如下: pshared:         PTHREAD_PROCESS_PRIVATE type:           ...

  7. 在golang中使用leveldb

    leveldb是一个很强悍的kv数据库,自然,我也希望能在go中使用. 如果有官方的go leveldb实现,那我会优先考虑,譬如这个,但是该库文档完全没有,并且在网上没发现有人用于实战环境,对其能否 ...

  8. Swift基础之PickerView(时间)选择器

    代码讲解:(后面有额外代码讲解) 首页设计UIPickerView的样式设计: leftArray = ["花朵","颜色","形状"]; ...

  9. 开放源码的安卓天气应用-android学习之旅(73)

    我在github上面发布了简易的天气应用,能够简单显示全国各个省市县市的天气 效果图片如下 源代码我放在github上了.我希望大家可以去下载,修改以后在上传维护,我的代码很简单.算是抛砖引玉,希望大 ...

  10. rhel6.4 安装 mysql-5.6

    rhel6.4 安装 mysql-5.6 下载(临时地址, 如不可用,请到oracle官网下载) 采用rpm安装. mysql服务端要安装: ftp://pepstack.com/pub/rpm/My ...