quartz官方示例在本地运行的方法总结

布满荆棘的人生 2023-06-07 03:19 53阅读 0赞

1. 从github上clone quartz源码

git clone https://github.com/quartz-scheduler/quartz.git

在编译前,确保本地安装了jdk,此处略。

quartz的官方示例在distribution子工程下,在本地编译子工程distribution时,报错:

20191012151308826.png

在本地搜索checkstyle.xml文件,并没有该文件。

修改,quartz/pom.xml,修改以下内容:

  1. <skipDeploy>true</skipDeploy>
  2. <skipJavadoc>true</skipJavadoc>
  3. <skipCheckstyle>true</skipCheckstyle>

以上修改为true,重新编译即可。

2. 运行示例

quartz官方示例中包含15个示例,除13、15外都可以通过mvn来执行:

编译:mvn install

执行:mvn exec:exec -P exampleX ( X 为1-15)

3.如何运行示例13

quartz并没有提供对示例13的一键执行方式,需要自己去摸索。

首先,为了避免运行时类库依赖错误,需要在编译时将依赖打入jar包内,当然如果不嫌麻烦,可以将所有依赖加入到classpath中。

修改pom.xml,添加plug-in,如下:

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-assembly-plugin</artifactId>
  4. <version>2.4.1</version>
  5. <configuration>
  6. <!-- get all project dependencies -->
  7. <descriptorRefs>
  8. <descriptorRef>jar-with-dependencies</descriptorRef>
  9. </descriptorRefs>
  10. <!-- MainClass in mainfest make a executable jar -->
  11. <archive>
  12. <manifest>
  13. <mainClass>util.Microseer</mainClass>
  14. </manifest>
  15. </archive>
  16. </configuration>
  17. <executions>
  18. <execution>
  19. <id>make-assembly</id>
  20. <!-- bind to the packaging phase -->
  21. <phase>package</phase>
  22. <goals>
  23. <goal>single</goal>
  24. </goals>
  25. </execution>
  26. </executions>
  27. </plugin>

重新编译,编译生成的jar包在quartz\distribution\examples\target下。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nYmI4Njg2_size_16_color_FFFFFF_t_70

将quartz-examples-2.2.4-SNAPSHOT-jar-with-dependencies.jar拷贝到指定的lib目录下,如:

quartz\distribution\examples\lib

然后将需要的其他jar包,也放入该目录,由于示例13是集群部署,需要数据库的Driver,这里用的是postgresql,所以将Driver拷贝到该目录下:

20191012170519597.png

创建数据库表的脚本在quartz\distribution\src\main\assembly\root\docs\dbTables下,支持十多种数据库,这里使用tables_postgres.sql,内容如下:

  1. -- Thanks to Patrick Lightbody for submitting this...
  2. --
  3. -- In your Quartz properties file, you'll need to set
  4. -- org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
  5. DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
  6. DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
  7. DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
  8. DROP TABLE IF EXISTS QRTZ_LOCKS;
  9. DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
  10. DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
  11. DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
  12. DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
  13. DROP TABLE IF EXISTS QRTZ_TRIGGERS;
  14. DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
  15. DROP TABLE IF EXISTS QRTZ_CALENDARS;
  16. CREATE TABLE QRTZ_JOB_DETAILS
  17. (
  18. SCHED_NAME VARCHAR(120) NOT NULL,
  19. JOB_NAME VARCHAR(200) NOT NULL,
  20. JOB_GROUP VARCHAR(200) NOT NULL,
  21. DESCRIPTION VARCHAR(250) NULL,
  22. JOB_CLASS_NAME VARCHAR(250) NOT NULL,
  23. IS_DURABLE BOOL NOT NULL,
  24. IS_NONCONCURRENT BOOL NOT NULL,
  25. IS_UPDATE_DATA BOOL NOT NULL,
  26. REQUESTS_RECOVERY BOOL NOT NULL,
  27. JOB_DATA BYTEA NULL,
  28. PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
  29. );
  30. CREATE TABLE QRTZ_TRIGGERS
  31. (
  32. SCHED_NAME VARCHAR(120) NOT NULL,
  33. TRIGGER_NAME VARCHAR(200) NOT NULL,
  34. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  35. JOB_NAME VARCHAR(200) NOT NULL,
  36. JOB_GROUP VARCHAR(200) NOT NULL,
  37. DESCRIPTION VARCHAR(250) NULL,
  38. NEXT_FIRE_TIME BIGINT NULL,
  39. PREV_FIRE_TIME BIGINT NULL,
  40. PRIORITY INTEGER NULL,
  41. TRIGGER_STATE VARCHAR(16) NOT NULL,
  42. TRIGGER_TYPE VARCHAR(8) NOT NULL,
  43. START_TIME BIGINT NOT NULL,
  44. END_TIME BIGINT NULL,
  45. CALENDAR_NAME VARCHAR(200) NULL,
  46. MISFIRE_INSTR SMALLINT NULL,
  47. JOB_DATA BYTEA NULL,
  48. PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
  49. FOREIGN KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
  50. REFERENCES QRTZ_JOB_DETAILS (SCHED_NAME, JOB_NAME, JOB_GROUP)
  51. );
  52. CREATE 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 NOT NULL,
  58. REPEAT_INTERVAL BIGINT NOT NULL,
  59. TIMES_TRIGGERED BIGINT 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. CREATE TABLE QRTZ_CRON_TRIGGERS
  65. (
  66. SCHED_NAME VARCHAR(120) NOT NULL,
  67. TRIGGER_NAME VARCHAR(200) NOT NULL,
  68. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  69. CRON_EXPRESSION VARCHAR(120) NOT NULL,
  70. TIME_ZONE_ID VARCHAR(80),
  71. PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
  72. FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  73. REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  74. );
  75. CREATE TABLE QRTZ_SIMPROP_TRIGGERS
  76. (
  77. SCHED_NAME VARCHAR(120) NOT NULL,
  78. TRIGGER_NAME VARCHAR(200) NOT NULL,
  79. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  80. STR_PROP_1 VARCHAR(512) NULL,
  81. STR_PROP_2 VARCHAR(512) NULL,
  82. STR_PROP_3 VARCHAR(512) NULL,
  83. INT_PROP_1 INT NULL,
  84. INT_PROP_2 INT NULL,
  85. LONG_PROP_1 BIGINT NULL,
  86. LONG_PROP_2 BIGINT NULL,
  87. DEC_PROP_1 NUMERIC(13, 4) NULL,
  88. DEC_PROP_2 NUMERIC(13, 4) NULL,
  89. BOOL_PROP_1 BOOL NULL,
  90. BOOL_PROP_2 BOOL NULL,
  91. PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
  92. FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  93. REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  94. );
  95. CREATE TABLE QRTZ_BLOB_TRIGGERS
  96. (
  97. SCHED_NAME VARCHAR(120) NOT NULL,
  98. TRIGGER_NAME VARCHAR(200) NOT NULL,
  99. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  100. BLOB_DATA BYTEA NULL,
  101. PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
  102. FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  103. REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  104. );
  105. CREATE TABLE QRTZ_CALENDARS
  106. (
  107. SCHED_NAME VARCHAR(120) NOT NULL,
  108. CALENDAR_NAME VARCHAR(200) NOT NULL,
  109. CALENDAR BYTEA NOT NULL,
  110. PRIMARY KEY (SCHED_NAME, CALENDAR_NAME)
  111. );
  112. CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
  113. (
  114. SCHED_NAME VARCHAR(120) NOT NULL,
  115. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  116. PRIMARY KEY (SCHED_NAME, TRIGGER_GROUP)
  117. );
  118. CREATE TABLE QRTZ_FIRED_TRIGGERS
  119. (
  120. SCHED_NAME VARCHAR(120) NOT NULL,
  121. ENTRY_ID VARCHAR(95) NOT NULL,
  122. TRIGGER_NAME VARCHAR(200) NOT NULL,
  123. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  124. INSTANCE_NAME VARCHAR(200) NOT NULL,
  125. FIRED_TIME BIGINT NOT NULL,
  126. SCHED_TIME BIGINT NOT NULL,
  127. PRIORITY INTEGER NOT NULL,
  128. STATE VARCHAR(16) NOT NULL,
  129. JOB_NAME VARCHAR(200) NULL,
  130. JOB_GROUP VARCHAR(200) NULL,
  131. IS_NONCONCURRENT BOOL NULL,
  132. REQUESTS_RECOVERY BOOL NULL,
  133. PRIMARY KEY (SCHED_NAME, ENTRY_ID)
  134. );
  135. CREATE TABLE QRTZ_SCHEDULER_STATE
  136. (
  137. SCHED_NAME VARCHAR(120) NOT NULL,
  138. INSTANCE_NAME VARCHAR(200) NOT NULL,
  139. LAST_CHECKIN_TIME BIGINT NOT NULL,
  140. CHECKIN_INTERVAL BIGINT NOT NULL,
  141. PRIMARY KEY (SCHED_NAME, INSTANCE_NAME)
  142. );
  143. CREATE TABLE QRTZ_LOCKS
  144. (
  145. SCHED_NAME VARCHAR(120) NOT NULL,
  146. LOCK_NAME VARCHAR(40) NOT NULL,
  147. PRIMARY KEY (SCHED_NAME, LOCK_NAME)
  148. );
  149. CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY
  150. ON QRTZ_JOB_DETAILS (SCHED_NAME, REQUESTS_RECOVERY);
  151. CREATE INDEX IDX_QRTZ_J_GRP
  152. ON QRTZ_JOB_DETAILS (SCHED_NAME, JOB_GROUP);
  153. CREATE INDEX IDX_QRTZ_T_J
  154. ON QRTZ_TRIGGERS (SCHED_NAME, JOB_NAME, JOB_GROUP);
  155. CREATE INDEX IDX_QRTZ_T_JG
  156. ON QRTZ_TRIGGERS (SCHED_NAME, JOB_GROUP);
  157. CREATE INDEX IDX_QRTZ_T_C
  158. ON QRTZ_TRIGGERS (SCHED_NAME, CALENDAR_NAME);
  159. CREATE INDEX IDX_QRTZ_T_G
  160. ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_GROUP);
  161. CREATE INDEX IDX_QRTZ_T_STATE
  162. ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_STATE);
  163. CREATE INDEX IDX_QRTZ_T_N_STATE
  164. ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, TRIGGER_STATE);
  165. CREATE INDEX IDX_QRTZ_T_N_G_STATE
  166. ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_GROUP, TRIGGER_STATE);
  167. CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME
  168. ON QRTZ_TRIGGERS (SCHED_NAME, NEXT_FIRE_TIME);
  169. CREATE INDEX IDX_QRTZ_T_NFT_ST
  170. ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_STATE, NEXT_FIRE_TIME);
  171. CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE
  172. ON QRTZ_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME);
  173. CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE
  174. ON QRTZ_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_STATE);
  175. CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP
  176. ON QRTZ_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_GROUP, TRIGGER_STATE);
  177. CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME
  178. ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, INSTANCE_NAME);
  179. CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY
  180. ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, INSTANCE_NAME, REQUESTS_RECOVERY);
  181. CREATE INDEX IDX_QRTZ_FT_J_G
  182. ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, JOB_NAME, JOB_GROUP);
  183. CREATE INDEX IDX_QRTZ_FT_JG
  184. ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, JOB_GROUP);
  185. CREATE INDEX IDX_QRTZ_FT_T_G
  186. ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP);
  187. CREATE INDEX IDX_QRTZ_FT_TG
  188. ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, TRIGGER_GROUP);
  189. COMMIT;

在本地数据库中,执行以上SQL脚本,表结构创建成功。

进入示例13目录quartz\distribution\src\main\assembly\root\examples\example13,修改instance1.bat和instance2.bat

  1. @echo off
  2. rem Set Quartz to the base directory of the Quartz Distribution
  3. @SET WD=%~d0%~p0
  4. @SET QUARTZ=%WD%..\..
  5. @rem setup the class path...
  6. rem CALL "%WD%"..\bin\buildcp.bat
  7. SET QUARTZ_CP=%TMP_CP%
  8. rem !!!!!!! Please read important information. !!!!!!
  9. rem If "java" is not in your path, please set the path
  10. rem for Java 2 Runtime Environment in the path variable below
  11. rem for example :
  12. rem @SET PATH=D:\jdk1.6.0_18;%PATH%
  13. rem
  14. rem a configuration file for log4j logging
  15. @SET LOG4J_PROPS="-Dlog4j.configuration=file:%WD%log4j.xml"
  16. rem Set the location and name of the quartz.properties file
  17. @SET QUARTZ_PROPS="-Dorg.quartz.properties=%WD%instance1.properties"
  18. rem Put the path to your JDBC driver(s) in this variable
  19. rem or just drop the jar in the "lib" folder
  20. @SET JDBC_CP=E:\java src\quartz\distribution\examples\lib\postgresql-9.4.1209.jar;E:\java src\quartz\distribution\examples\lib\quartz-examples-2.2.4-SNAPSHOT-jar-with-dependencies.jar
  21. "java" -cp "%QUARTZ_CP%;%JDBC_CP%" %QUARTZ_PROPS% %LOG4J_PROPS% org.quartz.examples.example13.ClusterExample %1

双击instance1.bat即可启动scheduler实例1,同样操作,可启动scheduler示例2。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nYmI4Njg2_size_16_color_FFFFFF_t_70 1

发表评论

表情:
评论列表 (有 0 条评论,53人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Quartz学习总结

    Quartz学习总结 常规需求 每天早上的闹钟 定时统计数据 spring自带支持定时器的任务实现。其可通过简单配置来实现定时任务。 @