在应用程序服务器关闭时,关闭服务器环境中运行的AbstractScheduledService
(例如Tomcat)的首选方法是什么?我是否必须为此明确注册服务器侦听器,或者有没有办法将服务线程指定为守护进程?
答案 0 :(得分:1)
管理Service
(包括/特别是在服务器中)的标准方法是使用ServiceManager
。将所有服务添加到ServiceManager
,然后在启动时startAsync()
管理员,并在关机时添加stopAsync()
。你需要一个服务器监听器。
可以通过覆盖executor()
的{{1}}方法并返回使用产生守护程序线程的AbstractScheduledService
的执行程序来将服务线程指定为守护程序,但请注意,如果如果/当ThreadFactory
本身停止时,执行程序将不会自动关闭(尽管您可以像执行默认的AbstractScheduledService
实现那样添加一个将执行此操作的服务的侦听器)
那就是说,我建议executor()
加上服务器监听器。该方法应确保有序关闭您的服务。