如何处理quartz作业中的hibernate异常

时间:2015-04-14 06:33:20

标签: java hibernate exception quartz-scheduler

我想在我的石英作业类中捕获一个hibernate数据库异常,请找我的石英监听器和夸脱作业类,我正在尝试用数据库故障情况测试我的石英调度程序,同时执行我的石英作业我正在停止mysql db验证我的quartz作业类是否捕获hibernate异常。

但是如果发生任何数据库异常,下面的代码就无法捕获。 有人可以帮助我在这里做错了吗:

MyListener.java

@WebListener
public class MyListener extends QuartzInitializerListener {

   private final Logger logger = LoggerFactory.getLogger(MyListener.class);
   private Scheduler scheduler;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        super.contextInitialized(sce);
        ServletContext ctx = sce.getServletContext();
        StdSchedulerFactory factory = (StdSchedulerFactory) ctx.getAttribute(QUARTZ_FACTORY_KEY);
        try {
            scheduler = factory.getScheduler();
        JobDetail job = newJob(TestQuartzJob.class)
                .withIdentity("job1", "group1")
                .build();

        CronTrigger trigger = newTrigger()
                .withIdentity("trigger1", "group1")
                .withSchedule(cronSchedule("0/20 * * * * ?"))
                .build();

        scheduler.scheduleJob(job, trigger);
        scheduler.start();            

        } catch (Exception e) {
            ctx.log("There was an error scheduling the job.", e);
        }
    }

TestQuartzJob.java

public class TestQuartzJob implements Job throws JobExecutionException{

    Logger logger = Logger.getLogger(TestQuartzJob.class);
    Session mysession = HibernateUtilities.getJobsSessionFactory().openSession();
    Transaction transaction = mysession.beginTransaction();

    @Override
    public void execute(JobExecutionContext jec) {

        try {

            Student getstudName = (Student) mysession.
                    createCriteria(Student).add(eq(“student_id", “stud1234")).uniqueResult();

            String name = getstudName.getName();
        } catch (Exception e) {
            logger.info("--- Error in job!");
            JobExecutionException e2 = new JobExecutionException(e);
            // this job will refire immediately
            e2.refireImmediately();
            throw e2;
        }

    }

}

0 个答案:

没有答案