SpringCloud(第 054 篇)简单 Quartz

SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群

一、大致介绍

11、因网友提到有没有采用注解式配置的Quartz例子,因此本人就贴上了这样一个样例; 22、至于如何修改定时任务的 cronExpression 表达式值的话,大家可以参照之前的(第 010 篇)样子看看如何修改; 3 43、注意:配置文件中的 mysql 数据库链接配置大家就各自配置自己的哈;

二、实现步骤

2.1 添加 maven 引用包

1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <artifactId>springms-simple-quartz-config-cluster</artifactId> 8 <version>1.0-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <parent> 12 <groupId>com.springms.cloud</groupId> 13 <artifactId>springms-spring-cloud</artifactId> 14 <version>1.0-SNAPSHOT</version> 15 </parent> 16 17 <dependencies> 18 <!-- 访问数据库模块 --> 19 <dependency> 20 <groupId>org.springframework.boot</groupId> 21 <artifactId>spring-boot-starter-data-jpa</artifactId> 22 </dependency> 23 24 <!-- web模块 --> 25 <dependency> 26 <groupId>org.springframework.boot</groupId> 27 <artifactId>spring-boot-starter-web</artifactId> 28 </dependency> 29 30 <!-- MYSQL --> 31 <dependency> 32 <groupId>mysql</groupId> 33 <artifactId>mysql-connector-java</artifactId> 34 </dependency> 35 36 <!-- Jdbc 模块 --> 37 <dependency> 38 <groupId>org.springframework.boot</groupId> 39 <artifactId>spring-boot-starter-jdbc</artifactId> 40 </dependency> 41 42 <!-- quartz 模块 --> 43 <dependency> 44 <groupId>org.quartz-scheduler</groupId> 45 <artifactId>quartz</artifactId> 46 <version>2.3.0</version> 47 </dependency> 48 <dependency> 49 <groupId>org.quartz-scheduler</groupId> 50 <artifactId>quartz-jobs</artifactId> 51 <version>2.3.0</version> 52 </dependency> 53 <dependency> 54 <groupId>org.springframework</groupId> 55 <artifactId>spring-context-support</artifactId> 56 </dependency> 57 58 <!-- druid 线程池模块 --> 59 <dependency> 60 <groupId>com.alibaba</groupId> 61 <artifactId>druid</artifactId> 62 <version>1.1.3</version> 63 </dependency> 64 </dependencies> 65 66</project> 67

2.2 添加应用配置文件(springms-simple-quartz-config-cluster\src\main\resources\application.yml)

1server: 2 port: 8405 3spring: 4 application: 5 name: springms-simple-quartz-config-cluster #全部小写 6 7 8##################################################################################################### 9# mysql 属性配置 10 datasource: 11 driver-class-name: com.mysql.jdbc.Driver 12 url: jdbc:mysql://ip:3306/hmilyylimh?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true 13 username: username 14 password: password 15 jpa: 16 hibernate: 17 #ddl-auto: create #ddl-auto:设为create表示每次都重新建表 18 ddl-auto: update #ddl-auto:设为update表示每次都不会重新建表 19 show-sql: true 20##################################################################################################### 21 22 23 24 25 26 27 28##################################################################################################### 29# 打印日志 30logging: 31 level: 32 root: INFO 33 org.hibernate: INFO 34 org.hibernate.type.descriptor.sql.BasicBinder: TRACE 35 org.hibernate.type.descriptor.sql.BasicExtractor: TRACE 36 com.springms: DEBUG 37##################################################################################################### 38

2.3 添加 quartz 配置文件(springms-simple-quartz-config-cluster/src/main/resources/quartz.properties)

1org.quartz.scheduler.instanceName = quartzScheduler 2org.quartz.scheduler.instanceId = AUTO 3 4 5org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 6org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate 7org.quartz.jobStore.tablePrefix = QRTZ_ 8org.quartz.jobStore.isClustered = true 9org.quartz.jobStore.useProperties = false 10org.quartz.jobStore.clusterCheckinInterval = 20000 11 12 13org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 14org.quartz.threadPool.threadCount = 10 15org.quartz.threadPool.threadPriority = 5 16org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true 17

2.4 添加数据源配置类(springms-simple-quartz-config-cluster\src\main\java\com\springms\cloud\config\DataSourceConfig.java)

1package com.springms.cloud.config; 2 3import org.apache.tomcat.jdbc.pool.DataSource; 4import org.springframework.context.annotation.Bean; 5import org.springframework.context.annotation.Configuration; 6import org.springframework.core.env.Environment; 7 8import javax.annotation.Resource; 9 10/** 11 * 数据源配置。 12 * 13 * @author hmilyylimh 14 * 15 * @version 0.0.1 16 * 17 * @date 2017/12/17 18 * 19 */ 20@Configuration 21public class DataSourceConfig { 22 23 @Resource 24 private Environment env; 25 26 @Bean 27 public DataSource dataSource(){ 28 DataSource configDataSource = new DataSource(); 29 configDataSource.setUrl("jdbc:mysql://ip:3306/hmilyylimh?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"); 30 configDataSource.setDriverClassName("com.mysql.jdbc.Driver"); 31 configDataSource.setUsername("username"); 32 configDataSource.setPassword("password"); 33 configDataSource.setInitialSize(5); 34 configDataSource.setDefaultAutoCommit(true); 35 36 if(configDataSource.getUrl().startsWith("jdbc:mysql://ip")){ 37 throw new RuntimeException("请配置数据源地址"); 38 } 39 if(configDataSource.getUsername().startsWith("username")){ 40 throw new RuntimeException("请配置数据源用户名"); 41 } 42 if(configDataSource.getPassword().startsWith("password")){ 43 throw new RuntimeException("请配置数据源密码"); 44 } 45 46 // 这些配置看个人需要,需要的话可以全部配置起来,我这里写Demo的话就没有全部配置起来了 47 //configDataSource.setInitialSize(); 48 //configDataSource.setMinEvictableIdleTimeMillis(); 49 //configDataSource.setNumTestsPerEvictionRun(); 50 //configDataSource.setTestWhileIdle(); 51 //configDataSource.setMaxActive(); 52 //configDataSource.setMaxIdle(); 53 //configDataSource.setMinIdle(); 54 //configDataSource.setMaxWait(); 55 //configDataSource.setRemoveAbandoned(); 56 //configDataSource.setRemoveAbandonedTimeout(); 57 //configDataSource.setValidationQuery(); 58 //configDataSource.setValidationQueryTimeout(); 59 //configDataSource.setValidationInterval(); 60 //configDataSource.setTimeBetweenEvictionRunsMillis(); 61 62 return configDataSource; 63 } 64} 65

2.5 添加Quartz调度配置类(springms-simple-quartz-config-cluster\src\main\java\com\springms\cloud\config\QuartzSchedulerConfig.java)

1package com.springms.cloud.config; 2 3import com.springms.cloud.job.Job1; 4import com.springms.cloud.job.Job2; 5import org.apache.tomcat.jdbc.pool.DataSource; 6import org.quartz.CronTrigger; 7import org.quartz.JobDetail; 8import org.quartz.spi.JobFactory; 9import org.quartz.spi.TriggerFiredBundle; 10import org.slf4j.Logger; 11import org.slf4j.LoggerFactory; 12import org.springframework.beans.factory.annotation.Autowired; 13import org.springframework.beans.factory.annotation.Qualifier; 14import org.springframework.beans.factory.config.AutowireCapableBeanFactory; 15import org.springframework.beans.factory.config.PropertiesFactoryBean; 16import org.springframework.context.ApplicationContext; 17import org.springframework.context.ApplicationContextAware; 18import org.springframework.context.annotation.Bean; 19import org.springframework.context.annotation.Configuration; 20import org.springframework.core.io.ClassPathResource; 21import org.springframework.scheduling.quartz.CronTriggerFactoryBean; 22import org.springframework.scheduling.quartz.JobDetailFactoryBean; 23import org.springframework.scheduling.quartz.SchedulerFactoryBean; 24import org.springframework.scheduling.quartz.SpringBeanJobFactory; 25 26import java.io.IOException; 27import java.util.Properties; 28 29/** 30 * Quartz调度配置类。 31 * 32 * @author hmilyylimh 33 * 34 * @version 0.0.1 35 * 36 * @date 2017/12/17 37 * 38 */ 39@Configuration 40public class QuartzSchedulerConfig { 41 42 @Autowired 43 private DataSource dataSource; 44 45 private static final Logger Logger = LoggerFactory.getLogger(QuartzSchedulerConfig.class); 46 private static final String QUARTZ_PROPERTIES_NAME = "/quartz.properties"; 47 48 @Bean 49 public JobFactory jobFactory(ApplicationContext applicationContext) { 50 AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory(); 51 jobFactory.setApplicationContext(applicationContext); 52 return jobFactory; 53 } 54 55 @Bean 56 public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory, CronTrigger[] cronTrigger, JobDetail[] 57 jobDetails) { 58 SchedulerFactoryBean factoryBean = new SchedulerFactoryBean(); 59 try { 60 factoryBean.setQuartzProperties(quartzProperties()); 61 factoryBean.setDataSource(dataSource); 62 factoryBean.setJobFactory(jobFactory); 63 factoryBean.setTriggers(cronTrigger); 64 factoryBean.setJobDetails(jobDetails); 65 factoryBean.setOverwriteExistingJobs(true); 66 } catch (Exception e) { 67 Logger.error("加载 {} 配置文件失败.", QUARTZ_PROPERTIES_NAME, e); 68 throw new RuntimeException("加载配置文件失败", e); 69 } 70 71 return factoryBean; 72 } 73 74 @Bean(name = "job1Trigger") 75 public CronTriggerFactoryBean job1Trigger(@Qualifier("job1Detail") JobDetail jobDetail) { 76 CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean(); 77 cronTriggerFactoryBean.setJobDetail(jobDetail); 78 cronTriggerFactoryBean.setCronExpression("0/15 * * * * ?"); 79 return cronTriggerFactoryBean; 80 } 81 82 @Bean(name = "job1Detail") 83 public JobDetailFactoryBean job1Detail() { 84 JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean(); 85 jobDetailFactoryBean.setJobClass(Job1.class); 86 jobDetailFactoryBean.setDurability(true); 87 return jobDetailFactoryBean; 88 } 89 90 @Bean(name = "job2Trigger") 91 public CronTriggerFactoryBean job2Trigger(@Qualifier("job2Detail") JobDetail jobDetail) { 92 CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean(); 93 cronTriggerFactoryBean.setJobDetail(jobDetail); 94 cronTriggerFactoryBean.setCronExpression("0/5 * * * * ?"); 95 return cronTriggerFactoryBean; 96 } 97 98 @Bean(name = "job2Detail") 99 public JobDetailFactoryBean job2Detail() { 100 JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean(); 101 jobDetailFactoryBean.setJobClass(Job2.class); 102 jobDetailFactoryBean.setDurability(true); 103 return jobDetailFactoryBean; 104 } 105 106 @Bean 107 public Properties quartzProperties() throws IOException { 108 PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); 109 propertiesFactoryBean.setLocation(new ClassPathResource(QUARTZ_PROPERTIES_NAME)); 110 propertiesFactoryBean.afterPropertiesSet(); 111 return propertiesFactoryBean.getObject(); 112 } 113 114 class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { 115 116 private transient AutowireCapableBeanFactory beanFactory; 117 118 @Override 119 public void setApplicationContext(final ApplicationContext context) { 120 beanFactory = context.getAutowireCapableBeanFactory(); 121 } 122 123 @Override 124 protected Object createJobInstance(final TriggerFiredBundle bundle) 125 throws Exception { 126 final Object job = super.createJobInstance(bundle); 127 beanFactory.autowireBean(job); 128 return job; 129 } 130 } 131} 132

2.6 添加定时调度任务Job1(springms-simple-quartz-config-cluster\src\main\java\com\springms\cloud\job\Job1.java)

1package com.springms.cloud.job; 2 3import org.quartz.JobExecutionContext; 4import org.quartz.JobExecutionException; 5import org.springframework.scheduling.quartz.QuartzJobBean; 6import org.springframework.stereotype.Component; 7 8import java.text.SimpleDateFormat; 9import java.util.Date; 10 11/** 12 * 定时调度任务Job1. 13 * 14 * @author hmilyylimh 15 * 16 * @version 0.0.1 17 * 18 * @date 2017/12/17 19 * 20 */ 21@Component 22public class Job1 extends QuartzJobBean { 23 24 @Override 25 protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { 26 27 System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); 28 System.out.println("@@@@@@@@@@@@ "+(new SimpleDateFormat("yyyy-mm-dd HH:mm:ss.SSSSSS")).format(new Date())+" @@@@@@@@@@@"); 29 System.out.println("@@@@@@@@@@@@@@@@@@@@@@@ Job1 @@@@@@@@@@@@@@@@@@@@@@"); 30 System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); 31 System.out.println(); 32 } 33} 34

2.7 添加定时调度任务Job2(springms-simple-quartz-config-cluster\src\main\java\com\springms\cloud\job\Job2.java)

1package com.springms.cloud.job; 2 3import org.quartz.JobExecutionContext; 4import org.quartz.JobExecutionException; 5import org.slf4j.Logger; 6import org.slf4j.LoggerFactory; 7import org.springframework.scheduling.quartz.QuartzJobBean; 8 9import java.text.SimpleDateFormat; 10import java.util.Date; 11 12/** 13 * 定时调度任务Job2. 14 * 15 * @author hmilyylimh 16 * 17 * @version 0.0.1 18 * 19 * @date 2017/12/17 20 * 21 */ 22public class Job2 extends QuartzJobBean { 23 24 @Override 25 protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { 26 System.out.println("=================================================================="); 27 System.out.println("=========== "+(new SimpleDateFormat("yyyy-mm-dd HH:mm:ss.SSSSSS")).format(new Date())+" ============"); 28 System.out.println("======================= Job2 ======================"); 29 System.out.println("=================================================================="); 30 System.out.println(); 31 } 32}

2.8 执行 Quartz 的 11 张表入数据库(springms-simple-quartz-config-cluster/quartz-tables.log)

1DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; 2DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; 3DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; 4DROP TABLE IF EXISTS QRTZ_LOCKS; 5DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; 6DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; 7DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; 8DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; 9DROP TABLE IF EXISTS QRTZ_TRIGGERS; 10DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; 11DROP TABLE IF EXISTS QRTZ_CALENDARS; 12 13 14CREATE TABLE QRTZ_JOB_DETAILS 15 ( 16 SCHED_NAME VARCHAR(120) NOT NULL, 17 JOB_NAME VARCHAR(200) NOT NULL, 18 JOB_GROUP VARCHAR(200) NOT NULL, 19 DESCRIPTION VARCHAR(250) NULL, 20 JOB_CLASS_NAME VARCHAR(250) NOT NULL, 21 IS_DURABLE VARCHAR(1) NOT NULL, 22 IS_NONCONCURRENT VARCHAR(1) NOT NULL, 23 IS_UPDATE_DATA VARCHAR(1) NOT NULL, 24 REQUESTS_RECOVERY VARCHAR(1) NOT NULL, 25 JOB_DATA BLOB NULL, 26 PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) 27); 28 29CREATE TABLE QRTZ_TRIGGERS 30 ( 31 SCHED_NAME VARCHAR(120) NOT NULL, 32 TRIGGER_NAME VARCHAR(200) NOT NULL, 33 TRIGGER_GROUP VARCHAR(200) NOT NULL, 34 JOB_NAME VARCHAR(200) NOT NULL, 35 JOB_GROUP VARCHAR(200) NOT NULL, 36 DESCRIPTION VARCHAR(250) NULL, 37 NEXT_FIRE_TIME BIGINT(13) NULL, 38 PREV_FIRE_TIME BIGINT(13) NULL, 39 PRIORITY INTEGER NULL, 40 TRIGGER_STATE VARCHAR(16) NOT NULL, 41 TRIGGER_TYPE VARCHAR(8) NOT NULL, 42 START_TIME BIGINT(13) NOT NULL, 43 END_TIME BIGINT(13) NULL, 44 CALENDAR_NAME VARCHAR(200) NULL, 45 MISFIRE_INSTR SMALLINT(2) NULL, 46 JOB_DATA BLOB NULL, 47 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 48 FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) 49 REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) 50); 51 52CREATE TABLE QRTZ_SIMPLE_TRIGGERS 53 ( 54 SCHED_NAME VARCHAR(120) NOT NULL, 55 TRIGGER_NAME VARCHAR(200) NOT NULL, 56 TRIGGER_GROUP VARCHAR(200) NOT NULL, 57 REPEAT_COUNT BIGINT(7) NOT NULL, 58 REPEAT_INTERVAL BIGINT(12) NOT NULL, 59 TIMES_TRIGGERED BIGINT(10) NOT NULL, 60 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 61 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 62 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 63); 64 65CREATE TABLE QRTZ_CRON_TRIGGERS 66 ( 67 SCHED_NAME VARCHAR(120) NOT NULL, 68 TRIGGER_NAME VARCHAR(200) NOT NULL, 69 TRIGGER_GROUP VARCHAR(200) NOT NULL, 70 CRON_EXPRESSION VARCHAR(200) NOT NULL, 71 TIME_ZONE_ID VARCHAR(80), 72 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 73 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 74 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 75); 76 77CREATE TABLE QRTZ_SIMPROP_TRIGGERS 78 ( 79 SCHED_NAME VARCHAR(120) NOT NULL, 80 TRIGGER_NAME VARCHAR(200) NOT NULL, 81 TRIGGER_GROUP VARCHAR(200) NOT NULL, 82 STR_PROP_1 VARCHAR(512) NULL, 83 STR_PROP_2 VARCHAR(512) NULL, 84 STR_PROP_3 VARCHAR(512) NULL, 85 INT_PROP_1 INT NULL, 86 INT_PROP_2 INT NULL, 87 LONG_PROP_1 BIGINT NULL, 88 LONG_PROP_2 BIGINT NULL, 89 DEC_PROP_1 NUMERIC(13,4) NULL, 90 DEC_PROP_2 NUMERIC(13,4) NULL, 91 BOOL_PROP_1 VARCHAR(1) NULL, 92 BOOL_PROP_2 VARCHAR(1) NULL, 93 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 94 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 95 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 96); 97 98CREATE TABLE QRTZ_BLOB_TRIGGERS 99 ( 100 SCHED_NAME VARCHAR(120) NOT NULL, 101 TRIGGER_NAME VARCHAR(200) NOT NULL, 102 TRIGGER_GROUP VARCHAR(200) NOT NULL, 103 BLOB_DATA BLOB NULL, 104 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 105 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 106 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 107); 108 109CREATE TABLE QRTZ_CALENDARS 110 ( 111 SCHED_NAME VARCHAR(120) NOT NULL, 112 CALENDAR_NAME VARCHAR(200) NOT NULL, 113 CALENDAR BLOB NOT NULL, 114 PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) 115); 116 117CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS 118 ( 119 SCHED_NAME VARCHAR(120) NOT NULL, 120 TRIGGER_GROUP VARCHAR(200) NOT NULL, 121 PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) 122); 123 124CREATE TABLE QRTZ_FIRED_TRIGGERS 125 ( 126 SCHED_NAME VARCHAR(120) NOT NULL, 127 ENTRY_ID VARCHAR(95) NOT NULL, 128 TRIGGER_NAME VARCHAR(200) NOT NULL, 129 TRIGGER_GROUP VARCHAR(200) NOT NULL, 130 INSTANCE_NAME VARCHAR(200) NOT NULL, 131 FIRED_TIME BIGINT(13) NOT NULL, 132 SCHED_TIME BIGINT(13) NOT NULL, 133 PRIORITY INTEGER NOT NULL, 134 STATE VARCHAR(16) NOT NULL, 135 JOB_NAME VARCHAR(200) NULL, 136 JOB_GROUP VARCHAR(200) NULL, 137 IS_NONCONCURRENT VARCHAR(1) NULL, 138 REQUESTS_RECOVERY VARCHAR(1) NULL, 139 PRIMARY KEY (SCHED_NAME,ENTRY_ID) 140); 141 142CREATE TABLE QRTZ_SCHEDULER_STATE 143 ( 144 SCHED_NAME VARCHAR(120) NOT NULL, 145 INSTANCE_NAME VARCHAR(200) NOT NULL, 146 LAST_CHECKIN_TIME BIGINT(13) NOT NULL, 147 CHECKIN_INTERVAL BIGINT(13) NOT NULL, 148 PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) 149); 150 151CREATE TABLE QRTZ_LOCKS 152 ( 153 SCHED_NAME VARCHAR(120) NOT NULL, 154 LOCK_NAME VARCHAR(40) NOT NULL, 155 PRIMARY KEY (SCHED_NAME,LOCK_NAME) 156); 157 158 159commit; 160

2.9 添加 Quartz-Cluster 启动类(springms-simple-quartz-config-cluster\src\main\java\com\springms\cloud\SimpleQuartzConfigClusterApplication.java)

1package com.springms.cloud; 2 3import org.slf4j.Logger; 4import org.slf4j.LoggerFactory; 5import org.springframework.boot.SpringApplication; 6import org.springframework.boot.autoconfigure.SpringBootApplication; 7import org.springframework.context.annotation.ImportResource; 8 9/** 10 * 简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群。 11 * 12 * @author hmilyylimh 13 * 14 * @version 0.0.1 15 * 16 * @date 2017/12/17 17 * 18 */ 19@SpringBootApplication 20public class SimpleQuartzConfigClusterApplication { 21 22 private static final Logger Logger = LoggerFactory.getLogger(SimpleQuartzConfigClusterApplication.class); 23 24 public static void main(String[] args) { 25 SpringApplication.run(SimpleQuartzConfigClusterApplication.class, args); 26 27 System.out.println("【【【【【【 简单Quartz-Config-Cluster微服务 】】】】】】已启动."); 28 } 29}

三、测试

1/**************************************************************************************** 2 一、简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群: 3 4 1、添加 Quartz 相关配置文件; 5 2、启动 springms-simple-quartz-config-cluster 模块服务,启动3个端口(8405、8406、8407); 6 3、然后看到 3 台服务器只有 1 台服务器调用了 Job1 类中的方法,因此 Quartz 的集群分布式也算是部署成功了; 7 4、然后关闭 1 台活跃 Quartz 服务器; 8 5、再等一会儿就看到 2 台服务器中的 1 台服务器每隔一定的时间调用 Job1 类中的方法; 9 ****************************************************************************************/

四、下载地址

https://gitee.com/ylimhhmily/SpringCloudTutorial.git

SpringCloudTutorial交流QQ群: 235322432

SpringCloudTutorial交流微信群: 微信沟通群二维码图片链接

欢迎关注,您的肯定是对我最大的支持!!!

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )