Improvement #5 升级Quartz 2.x

This commit is contained in:
Calvin
2012-03-12 22:36:29 +08:00
parent 4c030e9a1a
commit c985dd5bcd
18 changed files with 113 additions and 85 deletions
+3
View File
@@ -480,6 +480,9 @@
<sql driver="${jdbc.driver}" url="${jdbc.url}" userid="${jdbc.username}" password="${jdbc.password}" src="src/main/resources/sql/${sql.type}/schema.sql" onerror="continue">
<classpath refid="maven.test.classpath" />
</sql>
<sql driver="${quartz.jdbc.driver}" url="${quartz.jdbc.url}" userid="${quartz.jdbc.username}" password="${quartz.jdbc.password}" src="src/main/resources/sql/${sql.type}/quartz.sql" onerror="continue">
<classpath refid="maven.test.classpath" />
</sql>
<dbunit driver="${jdbc.driver}" url="${jdbc.url}" userid="${jdbc.username}" password="${jdbc.password}">
<dbconfig>
@@ -7,19 +7,19 @@ import java.util.concurrent.TimeUnit;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.apache.commons.lang3.Validate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.support.DelegatingErrorHandlingRunnable;
import org.springframework.scheduling.support.TaskUtils;
import org.springside.examples.showcase.common.service.AccountManager;
import org.apache.commons.lang3.Validate;
import org.springside.modules.utils.Threads;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
/**
* 被ScheduledThreadPoolExecutor定时执行的任务类.
* 被ScheduledThreadPoolExecutor定时执行的任务类, 并强化了退出控制.
*/
public class JdkExecutorJob implements Runnable {
@@ -61,7 +61,7 @@ public class JdkExecutorJob implements Runnable {
@Override
public void run() {
long userCount = accountManager.getUserCount();
logger.info("There are {} user in database.", userCount);
logger.info("There are {} user in database, printed by jdk timer job.", userCount);
}
/**
@@ -32,7 +32,6 @@ public class QuartzClusterableJob extends QuartzJobBean {
/**
* 定时打印当前用户数到日志.
*/
@Override
protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {
AccountManager accountManager = applicationContext.getBean(AccountManager.class);
@@ -41,6 +40,6 @@ public class QuartzClusterableJob extends QuartzJobBean {
long userCount = accountManager.getUserCount();
String nodeName = (String) config.get("nodeName");
logger.info("There are {} user in database, print by {}'s job.", userCount, nodeName);
logger.info("There are {} user in database, printed by quartz cluster job on node {}.", userCount, nodeName);
}
}
@@ -20,6 +20,6 @@ public class QuartzJob {
*/
public void execute() {
long userCount = accountManager.getUserCount();
logger.info("There are {} user in database.", userCount);
logger.info("There are {} user in database, printed by quartz local job.", userCount);
}
}
@@ -16,7 +16,7 @@ import org.springside.examples.showcase.common.service.AccountManager;
import org.springside.modules.utils.Threads;
/**
* 使用Spring的ThreadPoolTaskScheduler执行Cron式任务的类.
* 使用Spring的ThreadPoolTaskScheduler执行Cron式任务的类, 并强化了退出控制.
*/
public class SpringCronJob implements Runnable {
@@ -55,7 +55,7 @@ public class SpringCronJob implements Runnable {
@Override
public void run() {
long userCount = accountManager.getUserCount();
logger.info("There are {} user in database.", userCount);
logger.info("There are {} user in database, printed by spring cron job.", userCount);
}
public void setCronExpression(String cronExpression) {
@@ -11,7 +11,8 @@
<import resource="jms/applicationContext-jms-advanced.xml" />
<import resource="jmx/applicationContext-jmx.xml" />
<import resource="log/applicationContext-log.xml" />
<import resource="schedule/applicationContext-executor.xml" />
<import resource="schedule/applicationContext-jdk-timer.xml" />
<import resource="schedule/applicationContext-spring-cron.xml" />
<import resource="schedule/applicationContext-quartz-cron-local.xml" />
<import resource="schedule/applicationContext-quartz-timer-cluster.xml" />
<import resource="security/applicationContext-shiro.xml" />
@@ -14,12 +14,4 @@
<!-- shutdown时等待任务完成, 最多等待20秒 -->
<property name="shutdownTimeout" value="20" />
</bean>
<!-- 根据Cron表达式执行的业务类 -->
<bean id="springCronJob" class="org.springside.examples.showcase.schedule.SpringCronJob" lazy-init="false">
<!-- cron表达式 -->
<property name="cronExpression" value="* 15 9-17 * * MON-FRI"/>
<!-- shutdown时等待任务完成, 最多等待20秒 -->
<property name="shutdownTimeout" value="20" />
</bean>
</beans>
@@ -6,7 +6,7 @@
<description>Quartz的本地Cron式执行任务配置</description>
<!-- Quartz本地Schduler -->
<bean id="localQuartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
<bean id="localQuartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- Triggers集成 -->
<property name="triggers">
<list>
@@ -24,7 +24,7 @@
</bean>
<!-- Cron式Trigger定义 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="cronJobDetail" />
<!-- 周一至五,朝九晚五工作时间内每半小时执行一次 -->
<property name="cronExpression" value="0 0/30 9-17 ? * MON-FRI" />
@@ -26,20 +26,18 @@
</bean>
<!-- Timer式 Trigger定义-->
<bean id="timerTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<bean id="timerTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="timerJobDetail" />
<!-- 每次执行间隔5分钟 -->
<property name="repeatInterval" value="300000" />
</bean>
<!-- Timer JobDetail, 基于JobDetailBean实例化Job Class,可持久化到数据库实现集群 -->
<bean id="timerJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
<bean id="timerJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="org.springside.examples.showcase.schedule.QuartzClusterableJob" />
<!-- fail-over节点重新执行之前所有失败或未执行的任务, 默认为false. -->
<property name="requestsRecovery" value="true" />
</bean>
<!-- Timer Job的可配置属性 -->
<!-- Timer Job的可配置属性,在job中通过applicationContext动态获取 -->
<util:map id="timerJobConfig">
<entry key="nodeName" value="${server.node_name}" />
</util:map>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
default-lazy-init="true">
<description>使用Spring的 Scheduled的定时任务配置</description>
<!-- 根据Cron表达式执行的业务类 -->
<bean id="springCronJob" class="org.springside.examples.showcase.schedule.SpringCronJob" lazy-init="false">
<!-- cron表达式 -->
<property name="cronExpression" value="* 15 9-17 * * MON-FRI"/>
<!-- shutdown时等待任务完成, 最多等待20秒 -->
<property name="shutdownTimeout" value="20" />
</bean>
</beans>
@@ -3,6 +3,7 @@
#============================================================================
org.quartz.scheduler.instanceName = ClusteredScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.skipUpdateCheck = true
#============================================================================
# Configure ThreadPool
@@ -10,7 +11,6 @@ org.quartz.scheduler.instanceId = AUTO
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
#============================================================================
# Configure JobStore
@@ -1,3 +1,13 @@
-- Thanks to Amir Kibbar and Peter Rietzler for contributing the schema for H2 database,
-- and verifying that it works with Quartz's StdJDBCDelegate
--
-- Note, Quartz depends on row-level locking which means you must use the MVCC=TRUE
-- setting on your H2 database, or you will experience dead-locks
--
--
-- In your Quartz properties file, you'll need to set
-- org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
DROP TABLE QRTZ_LOCKS IF EXISTS;
DROP TABLE QRTZ_SCHEDULER_STATE IF EXISTS;
DROP TABLE QRTZ_FIRED_TRIGGERS IF EXISTS;
@@ -10,14 +20,17 @@ DROP TABLE QRTZ_SIMPLE_TRIGGERS IF EXISTS;
DROP TABLE QRTZ_TRIGGERS IF EXISTS;
DROP TABLE QRTZ_JOB_LISTENERS IF EXISTS;
DROP TABLE QRTZ_JOB_DETAILS IF EXISTS;
DROP TABLE qrtz_simprop_triggers IF EXISTS;
DROP TABLE QRTZ_BLOB_TRIGGERS IF EXISTS;
CREATE TABLE QRTZ_CALENDARS (
SCHED_NAME VARCHAR(120) NOT NULL,
CALENDAR_NAME VARCHAR (200) NOT NULL ,
CALENDAR IMAGE NOT NULL
);
CREATE TABLE QRTZ_CRON_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR (200) NOT NULL ,
TRIGGER_GROUP VARCHAR (200) NOT NULL ,
CRON_EXPRESSION VARCHAR (120) NOT NULL ,
@@ -25,53 +38,52 @@ CREATE TABLE QRTZ_CRON_TRIGGERS (
);
CREATE TABLE QRTZ_FIRED_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
ENTRY_ID VARCHAR (95) NOT NULL ,
TRIGGER_NAME VARCHAR (200) NOT NULL ,
TRIGGER_GROUP VARCHAR (200) NOT NULL ,
IS_VOLATILE BOOLEAN NOT NULL ,
INSTANCE_NAME VARCHAR (200) NOT NULL ,
FIRED_TIME BIGINT NOT NULL ,
PRIORITY INTEGER NOT NULL ,
STATE VARCHAR (16) NOT NULL,
JOB_NAME VARCHAR (200) NULL ,
JOB_GROUP VARCHAR (200) NULL ,
IS_STATEFUL BOOLEAN NULL ,
IS_NONCONCURRENT BOOLEAN NULL ,
REQUESTS_RECOVERY BOOLEAN NULL
);
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_GROUP VARCHAR (200) NOT NULL
);
CREATE TABLE QRTZ_SCHEDULER_STATE (
SCHED_NAME VARCHAR(120) NOT NULL,
INSTANCE_NAME VARCHAR (200) NOT NULL ,
LAST_CHECKIN_TIME BIGINT NOT NULL ,
CHECKIN_INTERVAL BIGINT NOT NULL
);
CREATE TABLE QRTZ_LOCKS (
SCHED_NAME VARCHAR(120) NOT NULL,
LOCK_NAME VARCHAR (40) NOT NULL
);
CREATE TABLE QRTZ_JOB_DETAILS (
SCHED_NAME VARCHAR(120) NOT NULL,
JOB_NAME VARCHAR (200) NOT NULL ,
JOB_GROUP VARCHAR (200) NOT NULL ,
DESCRIPTION VARCHAR (250) NULL ,
JOB_CLASS_NAME VARCHAR (250) NOT NULL ,
IS_DURABLE BOOLEAN NOT NULL ,
IS_VOLATILE BOOLEAN NOT NULL ,
IS_STATEFUL BOOLEAN NOT NULL ,
IS_NONCONCURRENT BOOLEAN NOT NULL ,
IS_UPDATE_DATA BOOLEAN NOT NULL ,
REQUESTS_RECOVERY BOOLEAN NOT NULL ,
JOB_DATA IMAGE NULL
);
CREATE TABLE QRTZ_JOB_LISTENERS (
JOB_NAME VARCHAR (200) NOT NULL ,
JOB_GROUP VARCHAR (200) NOT NULL ,
JOB_LISTENER VARCHAR (200) NOT NULL
);
CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR (200) NOT NULL ,
TRIGGER_GROUP VARCHAR (200) NOT NULL ,
REPEAT_COUNT BIGINT NOT NULL ,
@@ -79,24 +91,37 @@ CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
TIMES_TRIGGERED BIGINT NOT NULL
);
CREATE TABLE qrtz_simprop_triggers
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
STR_PROP_1 VARCHAR(512) NULL,
STR_PROP_2 VARCHAR(512) NULL,
STR_PROP_3 VARCHAR(512) NULL,
INT_PROP_1 INTEGER NULL,
INT_PROP_2 INTEGER NULL,
LONG_PROP_1 BIGINT NULL,
LONG_PROP_2 BIGINT NULL,
DEC_PROP_1 NUMERIC(13,4) NULL,
DEC_PROP_2 NUMERIC(13,4) NULL,
BOOL_PROP_1 BOOLEAN NULL,
BOOL_PROP_2 BOOLEAN NULL,
);
CREATE TABLE QRTZ_BLOB_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR (200) NOT NULL ,
TRIGGER_GROUP VARCHAR (200) NOT NULL ,
BLOB_DATA IMAGE NULL
);
CREATE TABLE QRTZ_TRIGGER_LISTENERS (
TRIGGER_NAME VARCHAR (200) NOT NULL ,
TRIGGER_GROUP VARCHAR (200) NOT NULL ,
TRIGGER_LISTENER VARCHAR (200) NOT NULL
);
CREATE TABLE QRTZ_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR (200) NOT NULL ,
TRIGGER_GROUP VARCHAR (200) NOT NULL ,
JOB_NAME VARCHAR (200) NOT NULL ,
JOB_GROUP VARCHAR (200) NOT NULL ,
IS_VOLATILE BOOLEAN NOT NULL ,
DESCRIPTION VARCHAR (250) NULL ,
NEXT_FIRE_TIME BIGINT NULL ,
PREV_FIRE_TIME BIGINT NULL ,
@@ -113,12 +138,14 @@ CREATE TABLE QRTZ_TRIGGERS (
ALTER TABLE QRTZ_CALENDARS ADD
CONSTRAINT PK_QRTZ_CALENDARS PRIMARY KEY
(
SCHED_NAME,
CALENDAR_NAME
);
ALTER TABLE QRTZ_CRON_TRIGGERS ADD
CONSTRAINT PK_QRTZ_CRON_TRIGGERS PRIMARY KEY
(
SCHED_NAME,
TRIGGER_NAME,
TRIGGER_GROUP
);
@@ -126,60 +153,59 @@ ALTER TABLE QRTZ_CRON_TRIGGERS ADD
ALTER TABLE QRTZ_FIRED_TRIGGERS ADD
CONSTRAINT PK_QRTZ_FIRED_TRIGGERS PRIMARY KEY
(
SCHED_NAME,
ENTRY_ID
);
ALTER TABLE QRTZ_PAUSED_TRIGGER_GRPS ADD
CONSTRAINT PK_QRTZ_PAUSED_TRIGGER_GRPS PRIMARY KEY
(
SCHED_NAME,
TRIGGER_GROUP
);
ALTER TABLE QRTZ_SCHEDULER_STATE ADD
CONSTRAINT PK_QRTZ_SCHEDULER_STATE PRIMARY KEY
(
SCHED_NAME,
INSTANCE_NAME
);
ALTER TABLE QRTZ_LOCKS ADD
CONSTRAINT PK_QRTZ_LOCKS PRIMARY KEY
(
SCHED_NAME,
LOCK_NAME
);
ALTER TABLE QRTZ_JOB_DETAILS ADD
CONSTRAINT PK_QRTZ_JOB_DETAILS PRIMARY KEY
(
SCHED_NAME,
JOB_NAME,
JOB_GROUP
);
ALTER TABLE QRTZ_JOB_LISTENERS ADD
CONSTRAINT PK_QRTZ_JOB_LISTENERS PRIMARY KEY
(
JOB_NAME,
JOB_GROUP,
JOB_LISTENER
);
ALTER TABLE QRTZ_SIMPLE_TRIGGERS ADD
CONSTRAINT PK_QRTZ_SIMPLE_TRIGGERS PRIMARY KEY
(
SCHED_NAME,
TRIGGER_NAME,
TRIGGER_GROUP
);
ALTER TABLE QRTZ_TRIGGER_LISTENERS ADD
CONSTRAINT PK_QRTZ_TRIGGER_LISTENERS PRIMARY KEY
ALTER TABLE QRTZ_SIMPROP_TRIGGERS ADD
CONSTRAINT PK_QRTZ_SIMPROP_TRIGGERS PRIMARY KEY
(
SCHED_NAME,
TRIGGER_NAME,
TRIGGER_GROUP,
TRIGGER_LISTENER
TRIGGER_GROUP
);
ALTER TABLE QRTZ_TRIGGERS ADD
CONSTRAINT PK_QRTZ_TRIGGERS PRIMARY KEY
(
SCHED_NAME,
TRIGGER_NAME,
TRIGGER_GROUP
);
@@ -187,56 +213,51 @@ ALTER TABLE QRTZ_TRIGGERS ADD
ALTER TABLE QRTZ_CRON_TRIGGERS ADD
CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY
(
SCHED_NAME,
TRIGGER_NAME,
TRIGGER_GROUP
) REFERENCES QRTZ_TRIGGERS (
SCHED_NAME,
TRIGGER_NAME,
TRIGGER_GROUP
) ON DELETE CASCADE;
ALTER TABLE QRTZ_JOB_LISTENERS ADD
CONSTRAINT FK_QRTZ_JOB_LISTENERS_QRTZ_JOB_DETAILS FOREIGN KEY
(
JOB_NAME,
JOB_GROUP
) REFERENCES QRTZ_JOB_DETAILS (
JOB_NAME,
JOB_GROUP
) ON DELETE CASCADE;
ALTER TABLE QRTZ_SIMPLE_TRIGGERS ADD
CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY
(
SCHED_NAME,
TRIGGER_NAME,
TRIGGER_GROUP
) REFERENCES QRTZ_TRIGGERS (
SCHED_NAME,
TRIGGER_NAME,
TRIGGER_GROUP
) ON DELETE CASCADE;
ALTER TABLE QRTZ_TRIGGER_LISTENERS ADD
CONSTRAINT FK_QRTZ_TRIGGER_LISTENERS_QRTZ_TRIGGERS FOREIGN KEY
ALTER TABLE QRTZ_SIMPROP_TRIGGERS ADD
CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY
(
SCHED_NAME,
TRIGGER_NAME,
TRIGGER_GROUP
) REFERENCES QRTZ_TRIGGERS (
SCHED_NAME,
TRIGGER_NAME,
TRIGGER_GROUP
) ON DELETE CASCADE;
ALTER TABLE QRTZ_TRIGGERS ADD
CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS FOREIGN KEY
(
SCHED_NAME,
JOB_NAME,
JOB_GROUP
) REFERENCES QRTZ_JOB_DETAILS (
SCHED_NAME,
JOB_NAME,
JOB_GROUP
);
INSERT INTO QRTZ_LOCKS VALUES('TRIGGER_ACCESS');
INSERT INTO QRTZ_LOCKS VALUES('JOB_ACCESS');
INSERT INTO QRTZ_LOCKS VALUES('CALENDAR_ACCESS');
INSERT INTO QRTZ_LOCKS VALUES('STATE_ACCESS');
INSERT INTO QRTZ_LOCKS VALUES('MISFIRE_ACCESS');
COMMIT;
@@ -12,11 +12,11 @@ import org.springside.modules.test.data.H2Fixtures;
import org.springside.modules.test.spring.SpringTxTestCase;
import org.springside.modules.utils.Threads;
@Ignore("Unstatable on Slow Jenkins")
@Ignore("Unstable on Slow Jenkins")
@DirtiesContext
@ContextConfiguration(locations = { "/applicationContext.xml", "/schedule/applicationContext-executor.xml" })
@ContextConfiguration(locations = { "/applicationContext.xml", "/schedule/applicationContext-jdk-timer.xml" })
@TransactionConfiguration(transactionManager = "defaultTransactionManager")
public class JdkExecutorJobTest extends SpringTxTestCase {
public class JdkTimerJobTest extends SpringTxTestCase {
@Test
public void scheduleJob() throws Exception {
@@ -31,6 +31,6 @@ public class JdkExecutorJobTest extends SpringTxTestCase {
//验证任务已执行
assertEquals(1, appender.getAllLogs().size());
assertEquals("There are 6 user in database, print by default's job.", appender.getFirstMessage());
assertEquals("There are 6 user in database, print by jdk timer job.", appender.getFirstMessage());
}
}
@@ -17,11 +17,11 @@ import org.springside.modules.utils.Threads;
*
* @author calvin
*/
@Ignore("Unstatable on Slow Jenkins")
@Ignore("Unstable on Slow Jenkins")
@DirtiesContext
@ContextConfiguration(locations = { "/applicationContext.xml", "/schedule/applicationContext-quartz-timer-cluster.xml" })
@TransactionConfiguration(transactionManager = "defaultTransactionManager")
public class QuartzClusterableJobTest extends SpringTxTestCase {
public class QuartzTimerClusterJobTest extends SpringTxTestCase {
@Test
public void scheduleJob() throws Exception {
@@ -37,6 +37,7 @@ public class QuartzClusterableJobTest extends SpringTxTestCase {
//验证任务已执行
assertEquals(1, appender.getAllLogs().size());
assertEquals("There are 6 user in database, print by default's job.", appender.getFirstMessage());
assertEquals("There are 6 user in database, printed by quartz cluster job on node default.",
appender.getFirstMessage());
}
}
@@ -44,7 +44,7 @@ public class Threads {
pool.shutdownNow(); // Cancel currently executing tasks
// Wait a while for tasks to respond to being cancelled
if (!pool.awaitTermination(shutdownNowTimeout, timeUnit)) {
System.err.println("Pool did not terminate");
System.err.println("Pool did not terminated");
}
}
} catch (InterruptedException ie) {
@@ -62,7 +62,7 @@ public class Threads {
try {
pool.shutdownNow();
if (!pool.awaitTermination(timeout, timeUnit)) {
System.err.println("Pool did not terminate");
System.err.println("Pool did not terminated");
}
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
@@ -19,7 +19,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springside.modules.log.MockLog4jAppender;
@Ignore("Unstatable on Jenkins")
@Ignore("Unstable on Jenkins")
public class ThreadsTest {
@Test
+1 -1
View File
@@ -408,7 +408,7 @@
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.5</version>
<version>2.1.3</version>
</dependency>
<!-- CACHE begin -->
-2
View File
@@ -26,7 +26,6 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
@@ -55,7 +54,6 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>