0
私は別のスケジューラー(1時間ごとに実行)からスケジューラー(特定の条件に応じて実行する必要があります)を呼び出しています。 'if(diffMinutes> = freq)'の条件が成立すると、QSchedule3クラスのexecute(JobExecutionContextコンテキスト)メソッドが呼び出されます。 QSchedule2クラスから取得したデータベースの内容をそのメソッドに渡すには?それはできますか?いくつかの提案がありますか?QuartzScheduler:あるクラスから別のクラスにデータベース値を渡す
QSchedule1クラス
public class QSchedule1 {
public static void main(String[] args) throws SchedulerException {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail job = newJob(Q2.class).withIdentity("cronJob", "q2Job").build();
CronTrigger cronTrigger = newTrigger().withIdentity("trigger1", "q2Job")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0/1 * 1/1 * ? *")).build();
scheduler.scheduleJob(job, cronTrigger);
scheduler.start();
}
}
QSchedule2クラス
public class QSchedule2 implements Job {
private static Date date1 = null;
private static Date date2 = null;
private static String dateStart = "";
private static String dateStop = "";
public void execute(JobExecutionContext context) throws JobExecutionException {
q2();
}
public void q2() {
String exp = "";
try {
Class.forName(driverClassName);
con = DriverManager.getConnection(url, dbUsername, dbPassword);
dateStop = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(System.currentTimeMillis());
ps = con.prepareStatement(
"select report_name,frequency,emailDate from ErrorReport where sendReport='Yes'");
rs = ps.executeQuery();
while (rs.next()) {
dateStart = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(rs.getTimestamp(3));
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
date1 = format.parse(dateStart);
date2 = format.parse(dateStop);
long diff = date2.getTime() - date1.getTime();
long diffMinutes = diff/(60 * 1000) % 60;
String frequency = rs.getString(2);
int freq = Integer.parseInt(frequency);
if (diffMinutes >= freq) {
exp = "0 0/" + freq + " * 1/1 * ? *";
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail job = newJob(Q3.class).withIdentity("cronJob", "q3Job").build();
CronTrigger cronTrigger = newTrigger().withIdentity("trigger1", "q3Job")
.withSchedule(CronScheduleBuilder.cronSchedule(exp)).build();
scheduler.scheduleJob(job, cronTrigger);
scheduler.start();
} else {
System.err.println("No email sent");
}
}
} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
} finally {
try {
rs.close();
ps.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
QSchedule3クラス
public class QSchedule3 implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
//Get database contents here
}
}
私はJobDataMapを試してみましたが、私は他のクラスに値をフェッチすることができるよ私は「org.quartz.ObjectAlreadyExistsExceptionを取得しています:ジョブを保存することができません: 'q3Job.cronJob3'、これはすでにこのIDが存在するためです。 'エラー。 – user5776462
私は 'if(job3 == null){ \t \t \t \t \t scheduler.scheduleJob(job3、cronTrigger3);を試みました。他 \t \t \t \t} { \t \t \t \t \t scheduler.rescheduleJob(cronTrigger3.getKey()、cronTrigger3)。 \t \t \t \t} \t \t \t \t scheduler.start(); 'しかしQSchedule3が実行取得されていません。理由を教えてください。 – user5776462