当一个类调用另一个类

时间:2016-04-21 13:27:43

标签: java quartz-scheduler

所以,我对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()方法调用其他两个方法的位置。如果我删除那些行,即创建对象并调用这些方法,它会一直运行到最后。如果我将其移除并将其放置在较低的位置,它会再次运行至该点,然后停止。我不知道发生了什么或为什么。提前帮助我。

1 个答案:

答案 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。 希望这有帮助!