服务器环境上的Guava AbstractScheduledService

Guava AbstractScheduledService on server environment

当应用程序服务器关闭时,在服务器环境(例如 Tomcat)中关闭 AbstractScheduledService 运行 的首选方法是什么?我是否必须为此显式注册一个服务器侦听器,或者有没有办法将服务线程指定为守护进程?

管理 Service 的标准方法(服务器中的 including/particularly)是使用 ServiceManager。将所有服务添加到 ServiceManager,然后 startAsync() 启动时管理器和 stopAsync() 关闭时。为此,您需要一个服务器侦听器。

可以通过覆盖 AbstractScheduledServiceexecutor() 方法并返回一个使用 ThreadFactory 生成守护线程的执行程序来将服务线程指定为守护进程,但请注意如果你这样做,执行器不会自动关闭 if/when AbstractScheduledService 本身会停止(尽管你可以向服务添加一个侦听器,就像默认的 executor() 实施)。

也就是说,我建议 ServiceManager 加上服务器侦听器。该方法应确保您的服务有序关闭。