Quartz存储与持久化--mysql--建表
<p>Quartz提供两种基本作业存储类型。</p>
第一种类型叫做RAMJobStore。
第二种类型叫做JDBC作业存储。
在默认情况下Quartz将任务调度的运行信息保存在内存中,这种方法提供了最佳的性能,因为内存中数据访问最快。不足之处是缺乏数据的持久性,当程序路途停止或系统崩溃时,所有运行的信息都会丢失。
比如我们希望安排一个执行100次的任务,如果执行到50次时系统崩溃了,系统重启时任务的执行计数器将从0开始。在大多数实际的应用中,我们往往并不需要保存任务调度的现场数据,因为很少需要规划一个指定执行次数的任务。对于仅执行一次的任务来说,其执行条件信息本身应该是已经持久化的业务数据(如锁定到期解锁任务,解锁的时间应该是业务数据),当执行完成后,条件信息也会相应改变。当然调度现场信息不仅仅是记录运行次数,还包括调度规则、JobDataMap中的数据等等。
如果确实需要持久化任务调度信息,Quartz允许你通过调整其属性文件,将这些信息保存到数据库中。使用数据库保存任务调度信息后,即使系统崩溃后重新启动,任务的调度信息将得到恢复。如前面所说的例子,执行50次崩溃后重新运行,计数器将从51开始计数。使用了数据库保存信息的任务称为持久化任务。
对比
类型 | 优点 | 缺点 |
RAMJobStore | 不要外部数据库,配置容易,运行速度快 | 因为调度程序信息是存储在被分配给JVM的内存里面,所以,当应用程序停止运行时,所有调度信息将被丢失。另外因为存储到JVM内存里面,所以可以存储多少个Job和Trigger将会受到限制 |
JDBC作业存储 | 支持集群,因为所有的任务信息都会保存到数据库中,可以控制事物,还有就是如果应用服务器关闭或者重启,任务信息都不会丢失,并且可以恢复因服务器关闭或者重启而导致执行失败的任务 | 运行速度的快慢取决与连接数据库的快慢 |
1:建立数据存储表
因为需要把quartz的数据保存到数据库,所以要建立相关的数据库。这个可以从下载到的quartz包里面找到对应的sql脚本,目前可以支持mysql,DB2,oracle等主流的数据库,自己可以根据项目需要选择合适的脚本运行。
我的项目是mysql的,就在数据中建立了一个quartzdb的database,因为我们用的是mysql,所以执行tables_mysql_innodb.sql脚本建表。其中脚本 文件位于:quartz-2.2.3\docs\dbTables(根据你Quartz放置的目录会不同)
2:里面就是quartz框架需要的表,因为我们用到的是mysql数据库,可以看驱动类StdJDBCDelegate.class:
quartz.properties: # 驱动器方言 mysql驱动 org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
里面也就是jdbc 连接数据库 固定的sql语句、表
-
//
-
// Source code recreated from a .class file by IntelliJ IDEA
-
// (powered by Fernflower decompiler)
-
//
-
-
package org.quartz.impl.jdbcjobstore;
-
-
import java.io.ByteArrayInputStream;
-
import java.io.ByteArrayOutputStream;
-
import java.io.IOException;
-
import java.io.InputStream;
-
import java.io.NotSerializableException;
-
import java.io.ObjectInputStream;
-
import java.io.ObjectOutputStream;
-
import java.math.BigDecimal;
-
import java.sql.Blob;
-
import java.sql.Connection;
-
import java.sql.PreparedStatement;
-
import java.sql.ResultSet;
-
import java.sql.SQLException;
-
import java.sql.Statement;
-
import java.util.Date;
-
import java.util.HashMap;
-
import java.util.HashSet;
-
import java.util.Iterator;
-
import java.util.LinkedList;
-
import java.util.List;
-
import java.util.Map;
-
import java.util.Properties;
-
import java.util.Set;
-
import java.util.Map.Entry;
-
import org.quartz.Calendar;
-
import org.quartz.Job;
-
import org.quartz.JobDataMap;
-
import org.quartz.JobDetail;
-
import org.quartz.JobKey;
-
import org.quartz.JobPersistenceException;
-
import org.quartz.TriggerBuilder;
-
import org.quartz.TriggerKey;
-
import org.quartz.impl.JobDetailImpl;
-
import org.quartz.impl.jdbcjobstore.TriggerPersistenceDelegate.TriggerPropertyBundle;
-
import org.quartz.impl.matchers.GroupMatcher;
-
import org.quartz.impl.matchers.StringMatcher.StringOperatorName;
-
import org.quartz.impl.triggers.SimpleTriggerImpl;
-
import org.quartz.spi.ClassLoadHelper;
-
import org.quartz.spi.OperableTrigger;
-
import org.slf4j.Logger;
-
-
public
class StdJDBCDelegate implements DriverDelegate, StdJDBCConstants {
-
protected Logger logger =
null;
-
protected String tablePrefix =
"QRTZ_";
-
protected String instanceId;
-
protected String schedName;
-
protected
boolean useProperties;
-
protected ClassLoadHelper classLoadHelper;
-
protected List<TriggerPersistenceDelegate> triggerPersistenceDelegates =
new LinkedList();
-
private String schedNameLiteral =
null;
-
-
public StdJDBCDelegate() {
-
}
-
-
public void initialize(Logger logger, String tablePrefix, String schedName, String instanceId, ClassLoadHelper classLoadHelper, boolean useProperties, String initString) throws NoSuchDelegateException {
-
this.logger = logger;
-
this.tablePrefix = tablePrefix;
-
this.schedName = schedName;
-
this.instanceId = instanceId;
-
this.useProperties = useProperties;
-
this.classLoadHelper = classLoadHelper;
-
this.addDefaultTriggerPersistenceDelegates();
-
if (initString !=
null) {
-
String[] settings = initString.split(
"\\|");
-
String[] arr$ = settings;
-
int len$ = settings.length;
-
-
for(
int i$ =
0; i$ < len$; ++i$) {
-
String setting = arr$[i$];
-
String[] parts = setting.split(
"=");
-
String name = parts[
0];
-
if (parts.length !=
1 && parts[
1] !=
null && !parts[
1].equals(
"")) {
-
if (!name.equals(
"triggerPersistenceDelegateClasses")) {
-
throw
new NoSuchDelegateException(
"Unknown setting: '" + name +
"'");
-
}
-
-
String[] trigDelegates = parts[
1].split(
",");
-
String[] arr$ = trigDelegates;
-
int len$ = trigDelegates.length;
-
-
for(
int i$ =
0; i$ < len$; ++i$) {
-
String trigDelClassName = arr$[i$];
-
-
try {
-
Class<?> trigDelClass = classLoadHelper.loadClass(trigDelClassName);
-
this.addTriggerPersistenceDelegate((TriggerPersistenceDelegate)trigDelClass.newInstance());
-
}
catch (Exception var21) {
-
throw
new NoSuchDelegateException(
"Error instantiating TriggerPersistenceDelegate of type: " + trigDelClassName, var21);
-
}
-
}
-
}
-
}
-
-
}
-
}
-
-
protected void addDefaultTriggerPersistenceDelegates() {
-
this.addTriggerPersistenceDelegate(
new SimpleTriggerPersistenceDelegate());
-
this.addTriggerPersistenceDelegate(
new CronTriggerPersistenceDelegate());
-
this.addTriggerPersistenceDelegate(
new CalendarIntervalTriggerPersistenceDelegate());
-
this.addTriggerPersistenceDelegate(
new DailyTimeIntervalTriggerPersistenceDelegate());
-
}
-
-
protected boolean canUseProperties() {
-
return
this.useProperties;
-
}
-
-
public void addTriggerPersistenceDelegate(TriggerPersistenceDelegate delegate) {
-
this.logger.debug(
"Adding TriggerPersistenceDelegate of type: " + delegate.getClass().getCanonicalName());
-
delegate.initialize(
this.tablePrefix,
this.schedName);
-
this.triggerPersistenceDelegates.add(delegate);
-
}
-
-
public TriggerPersistenceDelegate findTriggerPersistenceDelegate(OperableTrigger trigger) {
-
Iterator i$ =
this.triggerPersistenceDelegates.iterator();
-
-
TriggerPersistenceDelegate delegate;
-
do {
-
if (!i$.hasNext()) {
-
return
null;
-
}
-
-
delegate = (TriggerPersistenceDelegate)i$.next();
-
}
while(!delegate.canHandleTriggerType(trigger));
-
-
return delegate;
-
}
-
-
public TriggerPersistenceDelegate findTriggerPersistenceDelegate(String discriminator) {
-
Iterator i$ =
this.triggerPersistenceDelegates.iterator();
-
-
TriggerPersistenceDelegate delegate;
-
do {
-
if (!i$.hasNext()) {
-
return
null;
-
}
-
-
delegate = (TriggerPersistenceDelegate)i$.next();
-
}
while(!delegate.getHandledTriggerTypeDiscriminator().equals(discriminator));
-
-
return delegate;
-
}
-
-
public int updateTriggerStatesFromOtherStates(Connection conn, String newState, String oldState1, String oldState2) throws SQLException {
-
PreparedStatement ps =
null;
-
-
int var6;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND (TRIGGER_STATE = ? OR TRIGGER_STATE = ?)"));
-
ps.setString(
1, newState);
-
ps.setString(
2, oldState1);
-
ps.setString(
3, oldState2);
-
var6 = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return var6;
-
}
-
-
public List<TriggerKey> selectMisfiredTriggers(Connection conn, long ts) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT * FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND NOT (MISFIRE_INSTR = -1) AND NEXT_FIRE_TIME < ? ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC"));
-
ps.setBigDecimal(
1,
new BigDecimal(String.valueOf(ts)));
-
rs = ps.executeQuery();
-
LinkedList list =
new LinkedList();
-
-
while(rs.next()) {
-
String triggerName = rs.getString(
"TRIGGER_NAME");
-
String groupName = rs.getString(
"TRIGGER_GROUP");
-
list.add(TriggerKey.triggerKey(triggerName, groupName));
-
}
-
-
LinkedList var12 = list;
-
return var12;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
}
-
-
public List<TriggerKey> selectTriggersInState(Connection conn, String state) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_STATE = ?"));
-
ps.setString(
1, state);
-
rs = ps.executeQuery();
-
LinkedList list =
new LinkedList();
-
-
while(rs.next()) {
-
list.add(TriggerKey.triggerKey(rs.getString(
1), rs.getString(
2)));
-
}
-
-
LinkedList var6 = list;
-
return var6;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
}
-
-
public List<TriggerKey> selectMisfiredTriggersInState(Connection conn, String state, long ts) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND NOT (MISFIRE_INSTR = -1) AND NEXT_FIRE_TIME < ? AND TRIGGER_STATE = ? ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC"));
-
ps.setBigDecimal(
1,
new BigDecimal(String.valueOf(ts)));
-
ps.setString(
2, state);
-
rs = ps.executeQuery();
-
LinkedList list =
new LinkedList();
-
-
while(rs.next()) {
-
String triggerName = rs.getString(
"TRIGGER_NAME");
-
String groupName = rs.getString(
"TRIGGER_GROUP");
-
list.add(TriggerKey.triggerKey(triggerName, groupName));
-
}
-
-
LinkedList var13 = list;
-
return var13;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
}
-
-
public boolean hasMisfiredTriggersInState(Connection conn, String state1, long ts, int count, List<TriggerKey> resultList) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND NOT (MISFIRE_INSTR = -1) AND NEXT_FIRE_TIME < ? AND TRIGGER_STATE = ? ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC"));
-
ps.setBigDecimal(
1,
new BigDecimal(String.valueOf(ts)));
-
ps.setString(
2, state1);
-
rs = ps.executeQuery();
-
boolean hasReachedLimit =
false;
-
-
while(rs.next() && !hasReachedLimit) {
-
if (resultList.size() == count) {
-
hasReachedLimit =
true;
-
}
else {
-
String triggerName = rs.getString(
"TRIGGER_NAME");
-
String groupName = rs.getString(
"TRIGGER_GROUP");
-
resultList.add(TriggerKey.triggerKey(triggerName, groupName));
-
}
-
}
-
-
boolean var15 = hasReachedLimit;
-
return var15;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
}
-
-
public int countMisfiredTriggersInState(Connection conn, String state1, long ts) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
int var7;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT COUNT(TRIGGER_NAME) FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND NOT (MISFIRE_INSTR = -1) AND NEXT_FIRE_TIME < ? AND TRIGGER_STATE = ?"));
-
ps.setBigDecimal(
1,
new BigDecimal(String.valueOf(ts)));
-
ps.setString(
2, state1);
-
rs = ps.executeQuery();
-
if (!rs.next()) {
-
throw
new SQLException(
"No misfired trigger count returned.");
-
}
-
-
var7 = rs.getInt(
1);
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
-
return var7;
-
}
-
-
public List<TriggerKey> selectMisfiredTriggersInGroupInState(Connection conn, String groupName, String state, long ts) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT TRIGGER_NAME FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND NOT (MISFIRE_INSTR = -1) AND NEXT_FIRE_TIME < ? AND TRIGGER_GROUP = ? AND TRIGGER_STATE = ? ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC"));
-
ps.setBigDecimal(
1,
new BigDecimal(String.valueOf(ts)));
-
ps.setString(
2, groupName);
-
ps.setString(
3, state);
-
rs = ps.executeQuery();
-
LinkedList list =
new LinkedList();
-
-
while(rs.next()) {
-
String triggerName = rs.getString(
"TRIGGER_NAME");
-
list.add(TriggerKey.triggerKey(triggerName, groupName));
-
}
-
-
LinkedList var13 = list;
-
return var13;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
}
-
-
public List<OperableTrigger> selectTriggersForRecoveringJobs(Connection conn) throws SQLException, IOException, ClassNotFoundException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT * FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND INSTANCE_NAME = ? AND REQUESTS_RECOVERY = ?"));
-
ps.setString(
1,
this.instanceId);
-
this.setBoolean(ps,
2,
true);
-
rs = ps.executeQuery();
-
long dumId = System.currentTimeMillis();
-
LinkedList list =
new LinkedList();
-
-
while(rs.next()) {
-
String jobName = rs.getString(
"JOB_NAME");
-
String jobGroup = rs.getString(
"JOB_GROUP");
-
String trigName = rs.getString(
"TRIGGER_NAME");
-
String trigGroup = rs.getString(
"TRIGGER_GROUP");
-
long firedTime = rs.getLong(
"FIRED_TIME");
-
long scheduledTime = rs.getLong(
"SCHED_TIME");
-
int priority = rs.getInt(
"PRIORITY");
-
SimpleTriggerImpl rcvryTrig =
new SimpleTriggerImpl(
"recover_" +
this.instanceId +
"_" + dumId++,
"RECOVERING_JOBS",
new Date(scheduledTime));
-
rcvryTrig.setJobName(jobName);
-
rcvryTrig.setJobGroup(jobGroup);
-
rcvryTrig.setPriority(priority);
-
rcvryTrig.setMisfireInstruction(-
1);
-
JobDataMap jd =
this.selectTriggerJobDataMap(conn, trigName, trigGroup);
-
jd.put(
"QRTZ_FAILED_JOB_ORIG_TRIGGER_NAME", trigName);
-
jd.put(
"QRTZ_FAILED_JOB_ORIG_TRIGGER_GROUP", trigGroup);
-
jd.put(
"QRTZ_FAILED_JOB_ORIG_TRIGGER_FIRETIME_IN_MILLISECONDS_AS_STRING", String.valueOf(firedTime));
-
jd.put(
"QRTZ_FAILED_JOB_ORIG_TRIGGER_SCHEDULED_FIRETIME_IN_MILLISECONDS_AS_STRING", String.valueOf(scheduledTime));
-
rcvryTrig.setJobDataMap(jd);
-
list.add(rcvryTrig);
-
}
-
-
LinkedList var21 = list;
-
return var21;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
}
-
-
public int deleteFiredTriggers(Connection conn) throws SQLException {
-
PreparedStatement ps =
null;
-
-
int var3;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1}"));
-
var3 = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return var3;
-
}
-
-
public int deleteFiredTriggers(Connection conn, String theInstanceId) throws SQLException {
-
PreparedStatement ps =
null;
-
-
int var4;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND INSTANCE_NAME = ?"));
-
ps.setString(
1, theInstanceId);
-
var4 = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return var4;
-
}
-
-
public void clearData(Connection conn) throws SQLException {
-
PreparedStatement ps =
null;
-
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}SIMPLE_TRIGGERS WHERE SCHED_NAME = {1}"));
-
ps.executeUpdate();
-
ps.close();
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}SIMPROP_TRIGGERS WHERE SCHED_NAME = {1}"));
-
ps.executeUpdate();
-
ps.close();
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}CRON_TRIGGERS WHERE SCHED_NAME = {1}"));
-
ps.executeUpdate();
-
ps.close();
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}BLOB_TRIGGERS WHERE SCHED_NAME = {1}"));
-
ps.executeUpdate();
-
ps.close();
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}TRIGGERS WHERE SCHED_NAME = {1}"));
-
ps.executeUpdate();
-
ps.close();
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1}"));
-
ps.executeUpdate();
-
ps.close();
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}CALENDARS WHERE SCHED_NAME = {1}"));
-
ps.executeUpdate();
-
ps.close();
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}PAUSED_TRIGGER_GRPS WHERE SCHED_NAME = {1}"));
-
ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
}
-
-
public int insertJobDetail(Connection conn, JobDetail job) throws IOException, SQLException {
-
ByteArrayOutputStream baos =
this.serializeJobData(job.getJobDataMap());
-
PreparedStatement ps =
null;
-
boolean var5 =
false;
-
-
int insertResult;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"INSERT INTO {0}JOB_DETAILS (SCHED_NAME, JOB_NAME, JOB_GROUP, DESCRIPTION, JOB_CLASS_NAME, IS_DURABLE, IS_NONCONCURRENT, IS_UPDATE_DATA, REQUESTS_RECOVERY, JOB_DATA) VALUES({1}, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
-
ps.setString(
1, job.getKey().getName());
-
ps.setString(
2, job.getKey().getGroup());
-
ps.setString(
3, job.getDescription());
-
ps.setString(
4, job.getJobClass().getName());
-
this.setBoolean(ps,
5, job.isDurable());
-
this.setBoolean(ps,
6, job.isConcurrentExectionDisallowed());
-
this.setBoolean(ps,
7, job.isPersistJobDataAfterExecution());
-
this.setBoolean(ps,
8, job.requestsRecovery());
-
this.setBytes(ps,
9, baos);
-
insertResult = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return insertResult;
-
}
-
-
public int updateJobDetail(Connection conn, JobDetail job) throws IOException, SQLException {
-
ByteArrayOutputStream baos =
this.serializeJobData(job.getJobDataMap());
-
PreparedStatement ps =
null;
-
boolean var5 =
false;
-
-
int insertResult;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"UPDATE {0}JOB_DETAILS SET DESCRIPTION = ?, JOB_CLASS_NAME = ?, IS_DURABLE = ?, IS_NONCONCURRENT = ?, IS_UPDATE_DATA = ?, REQUESTS_RECOVERY = ?, JOB_DATA = ? WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
-
ps.setString(
1, job.getDescription());
-
ps.setString(
2, job.getJobClass().getName());
-
this.setBoolean(ps,
3, job.isDurable());
-
this.setBoolean(ps,
4, job.isConcurrentExectionDisallowed());
-
this.setBoolean(ps,
5, job.isPersistJobDataAfterExecution());
-
this.setBoolean(ps,
6, job.requestsRecovery());
-
this.setBytes(ps,
7, baos);
-
ps.setString(
8, job.getKey().getName());
-
ps.setString(
9, job.getKey().getGroup());
-
insertResult = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return insertResult;
-
}
-
-
public List<TriggerKey> selectTriggerKeysForJob(Connection conn, JobKey jobKey) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
-
ps.setString(
1, jobKey.getName());
-
ps.setString(
2, jobKey.getGroup());
-
rs = ps.executeQuery();
-
LinkedList list =
new LinkedList();
-
-
while(rs.next()) {
-
String trigName = rs.getString(
"TRIGGER_NAME");
-
String trigGroup = rs.getString(
"TRIGGER_GROUP");
-
list.add(TriggerKey.triggerKey(trigName, trigGroup));
-
}
-
-
LinkedList var11 = list;
-
return var11;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
}
-
-
public int deleteJobDetail(Connection conn, JobKey jobKey) throws SQLException {
-
PreparedStatement ps =
null;
-
-
int var4;
-
try {
-
if (
this.logger.isDebugEnabled()) {
-
this.logger.debug(
"Deleting job: " + jobKey);
-
}
-
-
ps = conn.prepareStatement(
this.rtp(
"DELETE FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
-
ps.setString(
1, jobKey.getName());
-
ps.setString(
2, jobKey.getGroup());
-
var4 = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return var4;
-
}
-
-
public boolean isJobNonConcurrent(Connection conn, JobKey jobKey) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
boolean var5;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT IS_NONCONCURRENT FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
-
ps.setString(
1, jobKey.getName());
-
ps.setString(
2, jobKey.getGroup());
-
rs = ps.executeQuery();
-
if (rs.next()) {
-
var5 =
this.getBoolean(rs,
"IS_NONCONCURRENT");
-
return var5;
-
}
-
-
var5 =
false;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
-
return var5;
-
}
-
-
public boolean jobExists(Connection conn, JobKey jobKey) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
boolean var5;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT JOB_NAME FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
-
ps.setString(
1, jobKey.getName());
-
ps.setString(
2, jobKey.getGroup());
-
rs = ps.executeQuery();
-
if (!rs.next()) {
-
var5 =
false;
-
return var5;
-
}
-
-
var5 =
true;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
-
return var5;
-
}
-
-
public int updateJobData(Connection conn, JobDetail job) throws IOException, SQLException {
-
ByteArrayOutputStream baos =
this.serializeJobData(job.getJobDataMap());
-
PreparedStatement ps =
null;
-
-
int var5;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"UPDATE {0}JOB_DETAILS SET JOB_DATA = ? WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
-
this.setBytes(ps,
1, baos);
-
ps.setString(
2, job.getKey().getName());
-
ps.setString(
3, job.getKey().getGroup());
-
var5 = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return var5;
-
}
-
-
public JobDetail selectJobDetail(Connection conn, JobKey jobKey, ClassLoadHelper loadHelper) throws ClassNotFoundException, IOException, SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
JobDetailImpl var11;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT * FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
-
ps.setString(
1, jobKey.getName());
-
ps.setString(
2, jobKey.getGroup());
-
rs = ps.executeQuery();
-
JobDetailImpl job =
null;
-
if (rs.next()) {
-
job =
new JobDetailImpl();
-
job.setName(rs.getString(
"JOB_NAME"));
-
job.setGroup(rs.getString(
"JOB_GROUP"));
-
job.setDescription(rs.getString(
"DESCRIPTION"));
-
job.setJobClass(loadHelper.loadClass(rs.getString(
"JOB_CLASS_NAME"), Job.class));
-
job.setDurability(
this.getBoolean(rs,
"IS_DURABLE"));
-
job.setRequestsRecovery(
this.getBoolean(rs,
"REQUESTS_RECOVERY"));
-
Map<?, ?> map =
null;
-
if (
this.canUseProperties()) {
-
map =
this.getMapFromProperties(rs);
-
}
else {
-
map = (Map)
this.getObjectFromBlob(rs,
"JOB_DATA");
-
}
-
-
if (
null != map) {
-
job.setJobDataMap(
new JobDataMap(map));
-
}
-
}
-
-
var11 = job;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
-
return var11;
-
}
-
-
private Map<?, ?> getMapFromProperties(ResultSet rs)
throws ClassNotFoundException, IOException, SQLException {
-
InputStream is = (InputStream)
this.getJobDataFromBlob(rs,
"JOB_DATA");
-
if (is ==
null) {
-
return
null;
-
}
else {
-
Properties properties =
new Properties();
-
if (is !=
null) {
-
try {
-
properties.load(is);
-
}
finally {
-
is.close();
-
}
-
}
-
-
Map<?, ?> map =
this.convertFromProperty(properties);
-
return map;
-
}
-
}
-
-
public int selectNumJobs(Connection conn) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
int var5;
-
try {
-
int count =
0;
-
ps = conn.prepareStatement(
this.rtp(
"SELECT COUNT(JOB_NAME) FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1}"));
-
rs = ps.executeQuery();
-
if (rs.next()) {
-
count = rs.getInt(
1);
-
}
-
-
var5 = count;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
-
return var5;
-
}
-
-
public List<String> selectJobGroups(Connection conn) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT DISTINCT(JOB_GROUP) FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1}"));
-
rs = ps.executeQuery();
-
LinkedList list =
new LinkedList();
-
-
while(rs.next()) {
-
list.add(rs.getString(
1));
-
}
-
-
LinkedList var5 = list;
-
return var5;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
}
-
-
public Set<JobKey> selectJobsInGroup(Connection conn, GroupMatcher<JobKey> matcher) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
try {
-
if (
this.isMatcherEquals(matcher)) {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT JOB_NAME, JOB_GROUP FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_GROUP = ?"));
-
ps.setString(
1,
this.toSqlEqualsClause(matcher));
-
}
else {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT JOB_NAME, JOB_GROUP FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_GROUP LIKE ?"));
-
ps.setString(
1,
this.toSqlLikeClause(matcher));
-
}
-
-
rs = ps.executeQuery();
-
LinkedList list =
new LinkedList();
-
-
while(rs.next()) {
-
list.add(JobKey.jobKey(rs.getString(
1), rs.getString(
2)));
-
}
-
-
HashSet var6 =
new HashSet(list);
-
return var6;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
}
-
-
protected boolean isMatcherEquals(GroupMatcher<?> matcher) {
-
return matcher.getCompareWithOperator().equals(StringOperatorName.EQUALS);
-
}
-
-
protected String toSqlEqualsClause(GroupMatcher<?> matcher) {
-
return matcher.getCompareToValue();
-
}
-
-
protected String toSqlLikeClause(GroupMatcher<?> matcher) {
-
String groupName;
-
switch(matcher.getCompareWithOperator()) {
-
case EQUALS:
-
groupName = matcher.getCompareToValue();
-
break;
-
case CONTAINS:
-
groupName =
"%" + matcher.getCompareToValue() +
"%";
-
break;
-
case ENDS_WITH:
-
groupName =
"%" + matcher.getCompareToValue();
-
break;
-
case STARTS_WITH:
-
groupName = matcher.getCompareToValue() +
"%";
-
break;
-
case ANYTHING:
-
groupName =
"%";
-
break;
-
default:
-
throw
new UnsupportedOperationException(
"Don't know how to translate " + matcher.getCompareWithOperator() +
" into SQL");
-
}
-
-
return groupName;
-
}
-
-
public int insertTrigger(Connection conn, OperableTrigger trigger, String state, JobDetail jobDetail) throws SQLException, IOException {
-
ByteArrayOutputStream baos =
null;
-
if (trigger.getJobDataMap().size() >
0) {
-
baos =
this.serializeJobData(trigger.getJobDataMap());
-
}
-
-
PreparedStatement ps =
null;
-
boolean var7 =
false;
-
-
int insertResult;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"INSERT INTO {0}TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, JOB_NAME, JOB_GROUP, DESCRIPTION, NEXT_FIRE_TIME, PREV_FIRE_TIME, TRIGGER_STATE, TRIGGER_TYPE, START_TIME, END_TIME, CALENDAR_NAME, MISFIRE_INSTR, JOB_DATA, PRIORITY) VALUES({1}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
-
ps.setString(
1, trigger.getKey().getName());
-
ps.setString(
2, trigger.getKey().getGroup());
-
ps.setString(
3, trigger.getJobKey().getName());
-
ps.setString(
4, trigger.getJobKey().getGroup());
-
ps.setString(
5, trigger.getDescription());
-
if (trigger.getNextFireTime() !=
null) {
-
ps.setBigDecimal(
6,
new BigDecimal(String.valueOf(trigger.getNextFireTime().getTime())));
-
}
else {
-
ps.setBigDecimal(
6, (BigDecimal)
null);
-
}
-
-
long prevFireTime = -
1L;
-
if (trigger.getPreviousFireTime() !=
null) {
-
prevFireTime = trigger.getPreviousFireTime().getTime();
-
}
-
-
ps.setBigDecimal(
7,
new BigDecimal(String.valueOf(prevFireTime)));
-
ps.setString(
8, state);
-
TriggerPersistenceDelegate tDel =
this.findTriggerPersistenceDelegate(trigger);
-
String type =
"BLOB";
-
if (tDel !=
null) {
-
type = tDel.getHandledTriggerTypeDiscriminator();
-
}
-
-
ps.setString(
9, type);
-
ps.setBigDecimal(
10,
new BigDecimal(String.valueOf(trigger.getStartTime().getTime())));
-
long endTime =
0L;
-
if (trigger.getEndTime() !=
null) {
-
endTime = trigger.getEndTime().getTime();
-
}
-
-
ps.setBigDecimal(
11,
new BigDecimal(String.valueOf(endTime)));
-
ps.setString(
12, trigger.getCalendarName());
-
ps.setInt(
13, trigger.getMisfireInstruction());
-
this.setBytes(ps,
14, baos);
-
ps.setInt(
15, trigger.getPriority());
-
insertResult = ps.executeUpdate();
-
if (tDel ==
null) {
-
this.insertBlobTrigger(conn, trigger);
-
}
else {
-
tDel.insertExtendedTriggerProperties(conn, trigger, state, jobDetail);
-
}
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return insertResult;
-
}
-
-
public int insertBlobTrigger(Connection conn, OperableTrigger trigger) throws SQLException, IOException {
-
PreparedStatement ps =
null;
-
ByteArrayOutputStream os =
null;
-
-
int var8;
-
try {
-
os =
new ByteArrayOutputStream();
-
ObjectOutputStream oos =
new ObjectOutputStream(os);
-
oos.writeObject(trigger);
-
oos.close();
-
byte[] buf = os.toByteArray();
-
ByteArrayInputStream is =
new ByteArrayInputStream(buf);
-
ps = conn.prepareStatement(
this.rtp(
"INSERT INTO {0}BLOB_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, BLOB_DATA) VALUES({1}, ?, ?, ?)"));
-
ps.setString(
1, trigger.getKey().getName());
-
ps.setString(
2, trigger.getKey().getGroup());
-
ps.setBinaryStream(
3, is, buf.length);
-
var8 = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return var8;
-
}
-
-
public int updateTrigger(Connection conn, OperableTrigger trigger, String state, JobDetail jobDetail) throws SQLException, IOException {
-
boolean updateJobData = trigger.getJobDataMap().isDirty();
-
ByteArrayOutputStream baos =
null;
-
if (updateJobData && trigger.getJobDataMap().size() >
0) {
-
baos =
this.serializeJobData(trigger.getJobDataMap());
-
}
-
-
PreparedStatement ps =
null;
-
boolean var8 =
false;
-
-
int insertResult;
-
try {
-
if (updateJobData) {
-
ps = conn.prepareStatement(
this.rtp(
"UPDATE {0}TRIGGERS SET JOB_NAME = ?, JOB_GROUP = ?, DESCRIPTION = ?, NEXT_FIRE_TIME = ?, PREV_FIRE_TIME = ?, TRIGGER_STATE = ?, TRIGGER_TYPE = ?, START_TIME = ?, END_TIME = ?, CALENDAR_NAME = ?, MISFIRE_INSTR = ?, PRIORITY = ?, JOB_DATA = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
-
}
else {
-
ps = conn.prepareStatement(
this.rtp(
"UPDATE {0}TRIGGERS SET JOB_NAME = ?, JOB_GROUP = ?, DESCRIPTION = ?, NEXT_FIRE_TIME = ?, PREV_FIRE_TIME = ?, TRIGGER_STATE = ?, TRIGGER_TYPE = ?, START_TIME = ?, END_TIME = ?, CALENDAR_NAME = ?, MISFIRE_INSTR = ?, PRIORITY = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
-
}
-
-
ps.setString(
1, trigger.getJobKey().getName());
-
ps.setString(
2, trigger.getJobKey().getGroup());
-
ps.setString(
3, trigger.getDescription());
-
long nextFireTime = -
1L;
-
if (trigger.getNextFireTime() !=
null) {
-
nextFireTime = trigger.getNextFireTime().getTime();
-
}
-
-
ps.setBigDecimal(
4,
new BigDecimal(String.valueOf(nextFireTime)));
-
long prevFireTime = -
1L;
-
if (trigger.getPreviousFireTime() !=
null) {
-
prevFireTime = trigger.getPreviousFireTime().getTime();
-
}
-
-
ps.setBigDecimal(
5,
new BigDecimal(String.valueOf(prevFireTime)));
-
ps.setString(
6, state);
-
TriggerPersistenceDelegate tDel =
this.findTriggerPersistenceDelegate(trigger);
-
String type =
"BLOB";
-
if (tDel !=
null) {
-
type = tDel.getHandledTriggerTypeDiscriminator();
-
}
-
-
ps.setString(
7, type);
-
ps.setBigDecimal(
8,
new BigDecimal(String.valueOf(trigger.getStartTime().getTime())));
-
long endTime =
0L;
-
if (trigger.getEndTime() !=
null) {
-
endTime = trigger.getEndTime().getTime();
-
}
-
-
ps.setBigDecimal(
9,
new BigDecimal(String.valueOf(endTime)));
-
ps.setString(
10, trigger.getCalendarName());
-
ps.setInt(
11, trigger.getMisfireInstruction());
-
ps.setInt(
12, trigger.getPriority());
-
if (updateJobData) {
-
this.setBytes(ps,
13, baos);
-
ps.setString(
14, trigger.getKey().getName());
-
ps.setString(
15, trigger.getKey().getGroup());
-
}
else {
-
ps.setString(
13, trigger.getKey().getName());
-
ps.setString(
14, trigger.getKey().getGroup());
-
}
-
-
insertResult = ps.executeUpdate();
-
if (tDel ==
null) {
-
this.updateBlobTrigger(conn, trigger);
-
}
else {
-
tDel.updateExtendedTriggerProperties(conn, trigger, state, jobDetail);
-
}
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return insertResult;
-
}
-
-
public int updateBlobTrigger(Connection conn, OperableTrigger trigger) throws SQLException, IOException {
-
PreparedStatement ps =
null;
-
ByteArrayOutputStream os =
null;
-
-
int var8;
-
try {
-
os =
new ByteArrayOutputStream();
-
ObjectOutputStream oos =
new ObjectOutputStream(os);
-
oos.writeObject(trigger);
-
oos.close();
-
byte[] buf = os.toByteArray();
-
ByteArrayInputStream is =
new ByteArrayInputStream(buf);
-
ps = conn.prepareStatement(
this.rtp(
"UPDATE {0}BLOB_TRIGGERS SET BLOB_DATA = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
-
ps.setBinaryStream(
1, is, buf.length);
-
ps.setString(
2, trigger.getKey().getName());
-
ps.setString(
3, trigger.getKey().getGroup());
-
var8 = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
if (os !=
null) {
-
os.close();
-
}
-
-
}
-
-
return var8;
-
}
-
-
public boolean triggerExists(Connection conn, TriggerKey triggerKey) throws SQLException {
-
PreparedStatement ps =
null;
-
ResultSet rs =
null;
-
-
boolean var5;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"SELECT TRIGGER_NAME FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
-
ps.setString(
1, triggerKey.getName());
-
ps.setString(
2, triggerKey.getGroup());
-
rs = ps.executeQuery();
-
if (!rs.next()) {
-
var5 =
false;
-
return var5;
-
}
-
-
var5 =
true;
-
}
finally {
-
closeResultSet(rs);
-
closeStatement(ps);
-
}
-
-
return var5;
-
}
-
-
public int updateTriggerState(Connection conn, TriggerKey triggerKey, String state) throws SQLException {
-
PreparedStatement ps =
null;
-
-
int var5;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
-
ps.setString(
1, state);
-
ps.setString(
2, triggerKey.getName());
-
ps.setString(
3, triggerKey.getGroup());
-
var5 = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return var5;
-
}
-
-
public int updateTriggerStateFromOtherStates(Connection conn, TriggerKey triggerKey, String newState, String oldState1, String oldState2, String oldState3) throws SQLException {
-
PreparedStatement ps =
null;
-
-
int var8;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ? AND (TRIGGER_STATE = ? OR TRIGGER_STATE = ? OR TRIGGER_STATE = ?)"));
-
ps.setString(
1, newState);
-
ps.setString(
2, triggerKey.getName());
-
ps.setString(
3, triggerKey.getGroup());
-
ps.setString(
4, oldState1);
-
ps.setString(
5, oldState2);
-
ps.setString(
6, oldState3);
-
var8 = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return var8;
-
}
-
-
public int updateTriggerGroupStateFromOtherStates(Connection conn, GroupMatcher<TriggerKey> matcher, String newState, String oldState1, String oldState2, String oldState3) throws SQLException {
-
PreparedStatement ps =
null;
-
-
int var8;
-
try {
-
ps = conn.prepareStatement(
this.rtp(
"UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND TRIGGER_GROUP LIKE ? AND (TRIGGER_STATE = ? OR TRIGGER_STATE = ? OR TRIGGER_STATE = ?)"));
-
ps.setString(
1, newState);
-
ps.setString(
2,
this.toSqlLikeClause(matcher));
-
ps.setString(
3, oldState1);
-
ps.setString(
4, oldState2);
-
ps.setString(
5, oldState3);
-
var8 = ps.executeUpdate();
-
}
finally {
-
closeStatement(ps);
-
}
-
-
return var8;
-
}
-
-
public int updateTriggerStateFromOtherState(Connection conn, TriggerKey triggerKey, String newState, String oldState) throws SQLException {
-