Я использую Кварц в отдельной банке. Добавлено, что в SET ENV PRE_CLASSPATH Weblogi c 12.2.1.3. Настроенный класс запуска. Параметр Cron динамически передается из таблицы БД. Пока это хорошо. Но я хочу изменить параметр cron в таблице db, чтобы Quartz взял его и динамически изменил расписание по расписанию. Проблема в том, что мне нужно перезапустить weblogi c, чтобы получить этот эффект. Потому что Quartz проверяет параметр БД только во время запуска сервера. Как заставить это работать в режиме реального времени?
package com.adac.scheduler.service;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class QuartzFTPPush implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("This is a Job That is Scheduled At "+new Date());
}
}
package com.adac.scheduler.service;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.KeyMatcher;
import java.sql.*;
public class QuartzFTPPushCronTrigger {
public static void main(String[] args) throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:AGPOS/yed6_4aN@10.6.6.11:1532:AGPTST");
Statement stmt=con.createStatement();
//ResultSet rs=stmt.executeQuery("SELECT DB_HOST, DB_PORT, DB_USERNAME, DB_PASSWORD, DB_SID, DB_TABLE from AG_RSD_SCHEDULE_MAS_TBL");
ResultSet rs = stmt.executeQuery("Select cron_schedule from AG_RSD_SCHEDULE_MAS_TBL where company_id=5");
/*
* while(rs.next())
* System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3));
*/
rs.next();
String cron_schedule = rs.getString(1);
con.close();
final JobKey jobKey = new JobKey("QuartzFTPPushName", "group1");
final JobDetail job = JobBuilder.newJob(QuartzFTPPush.class).withIdentity(jobKey).build();
//final String cron_schedule = "0/5 * * * * ?";
//final Trigger trigger = TriggerBuilder.newTrigger().withIdentity("QuartzFTPPushTriggerName", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
final Trigger trigger = TriggerBuilder.newTrigger().withIdentity("QuartzFTPPushTriggerName", "group1").withSchedule(CronScheduleBuilder.cronSchedule(cron_schedule)).build();
final Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// Listener attached to jobKey
scheduler.getListenerManager().addJobListener(new QuartzFTPPushListener(), KeyMatcher.keyEquals(jobKey));
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
package com.adac.scheduler.service;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;
public class QuartzFTPPushListener implements JobListener {
public String getName() {
return "QuartzFTPPushListener";
}
public void jobToBeExecuted(JobExecutionContext context) {
final String jobName = context.getJobDetail().getKey().toString();
System.out.println("jobToBeExecuted: " + jobName + " is starting...");
}
public void jobExecutionVetoed(JobExecutionContext context) {
System.out.println("jobExecutionVetoed");
}
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
System.out.println("jobWasExecuted");
final String jobName = context.getJobDetail().getKey().toString();
System.out.println("Job : " + jobName + " is finished!!");
if (!jobException.getMessage().equals("")) {
System.out.println("Exception thrown by: " + jobName + " Exception: " + jobException.getMessage());
}
}
}
Select cron_schedule from "AG_RSD_SCHEDULE_MAS_TBL" where company_id=5;
Результат запроса выше 0/10 * * * *?. Я хочу изменить это на какое-то другое значение, скажем, 0/5 * * * *?. И хотите, чтобы Quartz планировал с тем же без перезапуска weblogi c.
Пожалуйста, предложите.