Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Quartz计划程序无法获取JNDI DB资源,但仍将启动_Java_Tomcat_Jdbc_Quartz Scheduler_Jndi - Fatal编程技术网

Java Quartz计划程序无法获取JNDI DB资源,但仍将启动

Java Quartz计划程序无法获取JNDI DB资源,但仍将启动,java,tomcat,jdbc,quartz-scheduler,jndi,Java,Tomcat,Jdbc,Quartz Scheduler,Jndi,我正在使用QuartzInitializerListener初始化Tomcat8中的Quartz调度程序 当Quartz无法连接到my DB(JNDI资源)时: 15-Dec-2014 09:26:58.201信息[http-nio-8080-exec-10]org.apache.catalina.startup.HostConfig.deployDirectory部署web应用程序目录/home/../org.quartz.schedulerConfigeException:作业恢复期间发生故

我正在使用QuartzInitializerListener初始化Tomcat8中的Quartz调度程序

当Quartz无法连接到my DB(JNDI资源)时:

15-Dec-2014 09:26:58.201信息[http-nio-8080-exec-10]org.apache.catalina.startup.HostConfig.deployDirectory部署web应用程序目录/home/../org.quartz.schedulerConfigeException:作业恢复期间发生故障。[请参阅嵌套异常:org.quartz.JobPersistenceException:未能从数据源“DBConnectionPool”获取DB连接:java.sql.SQLException:无法通过JNDI url“java:comp/env/jdbc/DBConnectionPool”检索数据源java.sql.SQLException:无法创建PoolableConnectionFactory(通信链接失败)

根据quartz.propertiesn,它无论如何都会启动。它没有做任何事情……但如果发生这种情况,我希望quartz停止

我怎样才能做到这一点

问候
Sebastian

您可以像这样使用自定义类,而不是使用quartzlistner。 将其用作满足您需求的框架

@WebServlet(value="/QuartzTest",loadOnStartup=1)
public class QuartzInit extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public static int count=0;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public QuartzInit() {
        super();

        // TODO Auto-generated constructor stub
        try {

       System.out.println("TRying to start Quartz");

            JobDetail job = JobBuilder.newJob(AppCheckerJob.class)
                .withIdentity("AppCrawlerJob", "InfraStatus_Group").build();

            JobDetail job_email = JobBuilder.newJob(EmailJob.class)
                    .withIdentity("AppCrawlerEmailJob", "InfraStatus_Group").build();


            Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("AppCrawlerJobTRigger", "InfraStatus_Group")
                .withSchedule(        


                                CronScheduleBuilder.cronSchedule("0 /15 * * * ?")


                ).build();

            Trigger trigger_email = TriggerBuilder
                    .newTrigger()
                    .withIdentity("AppCrawlerEmailJobTRigger", "InfraStatus_Group")
                    .withSchedule(        


                            CronScheduleBuilder.dailyAtHourAndMinute(13,16)
                    ).build();


            // schedule it
            Scheduler scheduler = new StdSchedulerFactory().getScheduler();

            scheduler.start();

            //if (sched.checkExists(job.getKey())) {sched.rescheduleJob(trigger.getKey(), trigger); } else {sched.scheduleJob(job, trigger); } 

            if(scheduler.checkExists(job.getKey())){
                System.out.println("deleting old job netry");
                scheduler.deleteJob(job.getKey());
                //scheduler.rescheduleJob(trigger.getKey(), trigger);
            }
            if(scheduler.checkExists(job_email.getKey())){
                System.out.println("deleting old email job netry");
                scheduler.deleteJob(job_email.getKey());
                //scheduler.rescheduleJob(trigger.getKey(), trigger);
            }



            scheduler.scheduleJob(job, trigger);            
            scheduler.scheduleJob(job_email, trigger_email);




        } catch (Exception se) {
            se.printStackTrace();
           throw new RuntimeException("Error while initializing quartz!!!");
        }

    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

您希望quartz停止或停止整个应用程序stop@dev这两个选项对我来说都是可以的。如果有任何选项来处理QuartzInitializerListener的错误,它也将是合适的。这似乎更像是我的一个解决方法。是否有一个选项来改变quartz的行为?quartz有许多未知的行为,这就是为什么我总是初始化它我自己对quartz进行了序列化。我希望你能找到一些处理它的标准方法。几分钟前,我终于在网上找到了一个解决方案:你可以使用调度程序ListenerThank获取信息,我也会尝试使用它。