18

我想与我的 spring-mvc web-application 并行运行后台进程。我需要一种在上下文加载时自动启动的方法。后台进程是一个实现Runnable. spring-mvc 有一些设施吗?

4

3 回答 3

19

Spring 有一个全面的任务执行框架。请参阅文档的相关部分

我建议在你的上下文中使用一个 Spring bean,它在初始化时会将你的背景提交Runnable给一个SimpleAsyncTaskExecutorbean。这是最简单的方法,您可以根据需要将其变得更复杂和更强大。

于 2009-12-21T10:07:41.587 回答
7

我会继续查看 skaffman 链接的任务调度文档,但如果您真正想做的只是在上下文初始化时启动后台线程,还有一种更简单的方法。

<bean id="myRunnableThingy">
  ...
</bean>

<bean id="thingyThread" class="java.lang.Thread" init-method="start">
  <constructor-arg ref="myRunnableThingy"/>
</bean>
于 2009-12-21T23:07:51.003 回答
6

作为另一种选择,现在可以使用 Spring 的调度功能。在 Spring 3 或更高版本中,它具有类似 cron 的注解,允许您使用方法的简单注解来安排任务运行。它对自动装配也很友好。

此示例每 2 分钟安排一次任务,初始等待(启动时)为 30 秒。下一个任务将在方法完成后 2 分钟运行!如果您希望它准确地每 2 分钟运行一次,请改用 fixedInterval。

@Service
public class Cron {
private static Logger log = LoggerFactory.getLogger(Cron.class);

@Autowired
private PageService pageService;

@Scheduled(initialDelay = 30000, fixedDelay=120000)  // 2 minutes
public void cacheRefresh() {
    log.info("Running cache invalidation task");
    try {

        pageService.evict();
    } catch (Exception e) {
        log.error("cacheRefresh failed: " + e.getMessage());
    }
}

}

请务必将 @EnableAsync @EnableScheduling 添加到您的 Application 类以启用此功能。

于 2016-07-11T17:59:15.383 回答