错误org.quartz.core.JobRunShell - 作业group1.JobReport抛出未处理的异常

问题描述 投票:1回答:3

使用QUARTZ调度程序生成报告时出现奇怪的问题

我可以生成一份报告!没问题。

方法(reportsBean)正常工作,但是通过石英时会出现问题

有什么想法吗?我不知道该怎么做了:/

13449 [MyScheduler_Worker-1] ERROR org.quartz.core.JobRunShell - 作业group1.JobReport在com.changes的com.changes.bean.ReportsBean.createPdfCriticalChanges(ReportsBean.java:104)处抛出了一个未处理的异常:java.lang.NullPointerException orquart.quartz.core.JobRunShell.run(JobRunShell.java:202)中的.quartz.JobReport.execute(JobReport.java:36)org.quartz.simpl.SimpleThreadPool $ WorkerThread.run(SimpleThreadPool.java:573)13452 [MyScheduler_Worker-1] ERROR org.quartz.core.ErrorLogger - Job(group1.JobReport抛出异常.org.quartz.SchedulerException:Job在org.quartz处抛出了一个未处理的异常。[请参见嵌套异常:java.lang.NullPointerException] .core.JobRunShell.run(JobRunShell.java:213)at org.quartz.simpl.SimpleThreadPool $ WorkerThread.run(SimpleThreadPool.java:573)引起:com.changes.bean.ReportsBean.createPdfCriticalChanges的java.lang.NullPointerException (ReportsBean.java:104)位于org.quartz.core.JobRunShell.r的com.changes.quartz.JobReport.execute(JobReport.java:36)联合国(JobRunShell.java:202)

reportsbean

public class JobReport implements Job {


    public void execute(JobExecutionContext context) throws JobExecutionException {


        //BasicConfigurator.configure();
        try {
            ReportsBean reportsBean = new ReportsBean();
            reportsBean.createPdfCriticalChanges();
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy – hh:mm:ss");
            System.out.println("Rodou: " + dateFormat.format( new Date() ));
        } catch (JRException | SQLException e) {
            e.printStackTrace();
        }

    }

}

quartz.properties

org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.plugin.jobInitializer.class =org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = com/changes/quartz/quartz-config.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true

veb.hml

<!-- Inicio Quartz -->
<servlet>
    <servlet-name>QuartzServlet</servlet-name>
    <servlet-class>com.changes.quartz.servlet.QuartzServlet</servlet-class>
</servlet>
<servlet>
    <servlet-name>QuartzInitializer</servlet-name>
    <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
    <init-param>
        <param-name>config-file</param-name>
        <param-value>quartz.properties</param-value>
    </init-param>
    <init-param>
        <param-name>shutdown-on-unload</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>start-scheduler-on-load</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>
<!-- Fim Quartz -->
quartz-scheduler
3个回答
0
投票

问题是您的ReportsBean中有NullPointerException。

由于Quartz执行方法的签名是

public void execute(JobExecutionContext context) throws JobExecutionException

Quartz只能处理将在此方法中抛出的JobExecutionException。但在您的情况下,它会出现意外的NullPointerException。

要解决此问题,您应该删除NullPointer的原因。从上面的源代码我无法弄清楚这个异常的原因,因为它发生在您的ReportsBean中。

当然,您的方法ReportsBean.createPdfCriticalChanges可以访问未初始化的成员。


0
投票

在第104行:String report FacesContext.getCurrentInstance().getExternalContext().getRealPath("/web/reports/criticalcr.jrxml");

请记住:它的工作原理是石英。

ReportsBean

public void createPdfCriticalChanges() throws JRException,SQLException {
            System.out.println("generating report...");

            String report = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/web/reports/criticalcr.jrxml");
            JasperReport pathjrxml = JasperCompileManager.compileReport(report);
            //JasperReport pathjrxml = JasperCompileManager.compileReport("web/reports/criticalcr.jrxml"); //Funciona com o inicia Agenda em XML "web/reports/changetracker_criticalcr.jrxml"
            JasperPrint printReport = JasperFillManager.fillReport(pathjrxml, null, conn.getConn());
            JasperExportManager.exportReportToPdfFile(printReport, "/web/reports/changetracker_criticalcr.pdf"); //Funciona com o inicia Agenda em XML "web/reports/criticalcr.pdf"
            System.out.println("report generated!");
    }

0
投票

它不会抛出JobExecutionExceptionnb使用@postController和@override方法init

© www.soinside.com 2019 - 2024. All rights reserved.