【问题标题】:What happens if I do not shutdown() quartz scheduler如果我不关闭()石英调度程序会发生什么
【发布时间】:2017-02-07 21:27:39
【问题描述】:

如果我不在我的 Quartz scheduler 上调用 shutdown() 方法会发生什么?

我有一项工作需要每天在不同的时间运行:

    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

            JobDetail job = newJob(NotificationCronJob.class).withIdentity("notificationJob1", "notificationGroup1").build();

            CronTrigger cronTriggerSunday = newTrigger().withIdentity("notificationTrigger1", "notificationGroup1")
                    .withSchedule(cronSchedule(Config.SUNDAY_NOTIFY))
                    .forJob(job)
                    .build();
            CronTrigger cronTriggerMonday = newTrigger().withIdentity("notificationTrigger2", "notificationGroup1")
                    .withSchedule(cronSchedule(Config.MONDAY_NOTIFY))
                    .forJob(job)
                    .build();
            CronTrigger cronTriggerTuesday = newTrigger().withIdentity("notificationTrigger3", "notificationGroup1")
                    .withSchedule(cronSchedule(Config.TUESDAY_NOTIFY))
                    .forJob(job)
                    .build();
            CronTrigger cronTriggerWednesday = newTrigger().withIdentity("notificationTrigger4", "notificationGroup1")
                    .withSchedule(cronSchedule(Config.WEDENSDAY_NOTIFY))
                    .forJob(job)
                    .build();
            CronTrigger cronTriggerThursday = newTrigger().withIdentity("notificationTrigger5", "notificationGroup1")
                    .withSchedule(cronSchedule(Config.THURSDAY_NOTIFY))
                    .forJob(job)
                    .build();
            CronTrigger cronTriggerFriday = newTrigger().withIdentity("notificationTrigger6", "notificationGroup1")
                    .withSchedule(cronSchedule(Config.FRIDAY_NOTIFY))
                    .forJob(job)
                    .build();
            CronTrigger cronTriggerSaturday = newTrigger().withIdentity("notificationTrigger7", "notificationGroup1")
                    .withSchedule(cronSchedule(Config.SATURDAY_NOTIFY))
                    .forJob(job)
                    .build();

            scheduler.scheduleJob(job, cronTriggerSunday);
            scheduler.scheduleJob(cronTriggerMonday);
            scheduler.rescheduleJob(cronTriggerMonday.getKey(), cronTriggerMonday);
            scheduler.scheduleJob(cronTriggerTuesday);
            scheduler.scheduleJob(cronTriggerWednesday);
            scheduler.scheduleJob(cronTriggerThursday);
            scheduler.scheduleJob(cronTriggerFriday);
            scheduler.scheduleJob(cronTriggerSaturday);

            scheduler.start();

每个Config.DAY 都是一个cron 表达式,例如0 0 9 ? * 1 每周日上午9 点运行。

现在的问题是,如果我关闭调度程序,该作业将永远不会运行,因此我只需启动它并让它运行。但我担心这是否会导致某种内存泄漏和线程问题,我无法确定这是否是一个足够好的解决方案。我的石英属性如下:

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
org.quartz.jobStore.dataSource = myDS
org.quartz.dataSource.myDS.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
org.quartz.dataSource.myDS.URL = jdbc:sqlserver://localhost;databaseName=myDB
org.quartz.dataSource.myDS.user = myUser
org.quartz.dataSource.myDS.password = myPassword
org.quartz.dataSource.myDS.maxConnections = 5
org.quartz.jobStore.tablePrefix = QRTZ_

我最终需要实现的是一个在定义的时间运行作业的应用程序,并且调度应该是可变的,而无需重新启动应用程序。

【问题讨论】:

    标签: java cron quartz-scheduler


    【解决方案1】:

    Quartz 调度程序不应在您的应用程序运行时调用“关闭”方法。如果您发现内存泄漏等问题,可以向 Quartz 社区提出问题。

    如果调用了'shutdown',即使你再次调用'start'方法,Quartz调度器也永远不会重启。

    请参考以下 URL,它是 Quartz 文档。 http://www.quartz-scheduler.org/documentation/quartz-2.x/cookbook/ShutdownScheduler.html

    【讨论】:

    • 好的,谢谢@hiroyukik,然后我会尝试做一个实现,我只需启动调度程序,看看会发生什么。
    猜你喜欢
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2016-09-14
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    相关资源
    最近更新 更多