所以,我对Quartz很新。我有这个应用程序,我从数据库中获取数据,将其写入Excel工作表并发送邮件通知。这必须每周完成。为了测试,我现在将触发器设置为每5分钟重复一次。所以,这是我的JobListener:
public void contextInitialized(ServletContextEvent servletContext) {
Scheduler scheduler;
try {
System.out.println("Context Initialized");
JobDetail job = JobBuilder.newJob(ScheduledJob.class).withIdentity("schduledJob", "Group").build();
System.out.println("Job Build");
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("simpleTrigger", "group")
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(300).repeatForever())
.build();
System.out.println("Trigger");
scheduler = new StdSchedulerFactory().getScheduler();
System.out.println("Before Scheduler Start");
scheduler.start();
System.out.println("After Scheduler Start");
scheduler.scheduleJob(job, trigger);
System.out.println("Job Scheduled");
} catch (Exception ex) {
ex.getStackTrace();
}
}
这是我的工作班:
public void execute(JobExecutionContext arg0) {
try {
DataFromDB getData = new DataFromDB();
System.out.println("Job Started");
getData.getDataFromDB();
System.out.println("Job End");
} catch (Exception ex) {
ex.printStackTrace();
}
}
我有两个不同的类来写这个excel并发送电子邮件。这些方法在getDataFromDB()方法中的某处调用。现在,当我运行我的应用程序时,它没有给出任何错误,也没有异常,只是停止在我创建对象以从getDataFromDB()方法调用其他两个方法的位置。如果我删除那些行,即创建对象并调用这些方法,它会一直运行到最后。如果我将其移除并将其放置在较低的位置,它会再次运行至该点,然后停止。我不知道发生了什么或为什么。提前帮助我。
答案 0 :(得分:0)
我总是使用这样的东西:
Connection conn = null;
try {
conn = DBConnectionManager.getInstance().getConnection(dataSourceName);
PreparedStatement stmt = conn.prepareStatement(querySql);
stmt.setString(1, sParameter);
ResultSet rs = stmt.executeQuery();
//whatever you need
} catch (SQLException e) {
throw new RuntimeException("Failed to execute DB connection action.", e);
} finally {
if (conn != null) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
throw new RuntimeException("Failed to close DB connection.", e);
}
}
}
我可以把它放到一个单独的课程中,我没有问题。 当然,您必须在Quartz.properties中定义de datasource。 希望这有帮助!