【问题标题】:Stopping <task:scheduler> tasks停止 <task:scheduler> 任务
【发布时间】:2011-10-24 20:55:20
【问题描述】:

当服务器代码嵌入客户端进程时,我们的应用程序在客户端服务器模式和独立模式下运行。 在spring beans xml中我有预定的任务,比如

<task:scheduled-tasks scheduler="myScheduler">
        <task:scheduled ref="link-to-server" method="heartbeat" fixed-rate="1000"/>
</task:scheduled-tasks>

在独立模式下,应用程序不会退出,因为调度程序线程不是守护线程。如何阻止它们或使这些线程成为守护进程?

谢谢!

【问题讨论】:

    标签: java spring scheduled-tasks


    【解决方案1】:

    不要让它们成为守护进程,这会太突然地停止线程,因此会使您的进程处于不一致的状态。我相信 Spring 上下文的标准关闭,因此调度程序,只需 interrupts 所有正在运行的线程。因此,您应该在您的任务中轮询Thread.currentThread().isInterrupted 以确定关闭。像Object.wait() 这样的阻塞方法会在中断时抛出InterruptedException

    【讨论】:

    • 不确定我是否总能知道何时关闭 Spring 上下文。此代码用于许多测试,有时人们只是编写 main 方法、创建上下文和调用对象。现在很难更改所有这些代码。我更喜欢一些弹簧解决方案,在同一个 xml
    • Spring 注册了一个 JVM 关闭钩子,所以你不必担心。
    • 我发现它不起作用。仅当我输入 System.exit() 时,JVM 才会完成
    • 您是否有长时间运行的任务或使用无限循环的任务?您是否尝试过缩小范围,例如只配置一项仅向控制台打印内容的任务?
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多