Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

当 Spring 容器异常退出后,SpringJobScheduler 中的 quartz 线程没有关闭,导致 Java 进程无法退出。 #525

Closed
ScienJus opened this issue May 12, 2018 · 2 comments · Fixed by #583

Comments

@ScienJus
Copy link

Please answer these questions before submitting your issue. Thanks!
开源不易,我们希望将精力放在完成新功能和解决有价值的问题上,为了让大家的配合更具有效率,请填写以下列出的全部问题

Which version of Elastic-Job do you using?(您使用的Elastic-Job版本为?)

2.1.5

Expected behavior (您预期的结果是)

当 SpringJobScheduler 为 Spring Bean 时,可以在容器销毁时关闭 quartz 线程。

Actual behavior (实际运行的结果是)

在 SpringJobScheduler 启动后如果 Spring 容器异常退出,开启的 quartz 线程不会关闭,并且由于其是用户线程,所以会阻止 Java 进程退出。

Steps to reproduce the behavior (可重现问题的操作步骤)

由于我们是通过注解驱动并直接配置 SpringJobScheduler 为 Spring Bean 的,所以可能会有一些区别:

  1. 注册一个 SpringJobScheduler 为 Spring Bean,并设置 init 方法为 initialize method。
  2. 在其顺序之后的 Bean 的 initialize 发生抛出了异常并引起 Spring 容器退出。
  3. SpringJobScheduler 开启的 quartz 没有关闭,Java 进程无法退出。

目前我们是通过实现一个子类,绑定 Spring Bean 的销毁事件(实现 Closeable 或是 DisposableBean),获取 schedulerFacade 并 shutdown,我希望这个方法放到 SpringJobScheduler 中成为默认的方法。

我认为这是一个完全无害的增强,如果你们也认同这一点,我将提一个 PR 去实现这个行为,感谢。

Please provide the reproduce example codes (such as github link),otherwise we will label the issue as Invalid and close it.(为了节省复现问题的时间,请务必提供可重现的代码,否则我们会将issue直接标记为invalid并关闭)

Code should based on https://github.com/elasticjob/elastic-job-example
(代码请基于 https://github.com/elasticjob/elastic-job-example)

@loong0306
Copy link

您好,请问下您使用DisposableBean这边如何操作的呢,可以发下code嘛,谢谢。

@sailsgo
Copy link

sailsgo commented Sep 6, 2018

你好,获取SchedulerFacade 实例对象需要jobname等一些参数,我想spring容器销毁时暂停所有的定时任务线程调度,这样该怎么写呢,如何获取SchedulerFacade对象

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants