18

spring-mvc Web アプリケーションと並行してバックグラウンド プロセスを実行したいと考えています。コンテキストの読み込み時に自動的に開始する方法が必要です。バックグラウンド処理は を実装するクラスですRunnable。spring-mvc にはそのための機能がありますか?

4

3 に答える 3

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 のようなアノテーションがあります。自動配線にも対応しています。

この例では、最初の待機 (起動時) を 30 秒にして、2 分ごとにタスクをスケジュールします。次のタスクは、メソッドが完了してから 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 に答える