春のWebアプリケーションでは、バックグラウンド・プロセスを作成する方法?
-
20-09-2019 - |
質問
私は私の春-MVC Webアプリケーションと並行して、バックグラウンド・プロセスを実行したいです。私は、コンテキスト負荷に自動的で起動する方法が必要です。バックグラウンドプロセスはRunnable
を実装するクラスです。
春-MVCはそのためのいくつかの施設を持っていますか?
解決
春は、総合的なタスクの実行フレームワークを持っています。ドキュメントの関連部分をrel="noreferrer"> href="https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#scheduling" ます。
私は、初期化時に、あなたの背景Runnable
がSimpleAsyncTaskExecutor
Beanに提出し、あなたのコンテキストでのSpring Beanを有する示唆しています。それはあなたが合うように、より複雑で可能にすることができ、最も単純なアプローチ、です。
他のヒント
私が先に行くとskaffmanによってリンクされたタスクのスケジューリングのドキュメントを見て、しかし、あなたが本当にやりたいことがコンテキスト初期化時にバックグラウンドスレッドを起動している場合はもっと簡単な方法もありますでしょう。
<bean id="myRunnableThingy">
...
</bean>
<bean id="thingyThread" class="java.lang.Thread" init-method="start">
<constructor-arg ref="myRunnableThingy"/>
</bean>
別の選択肢として、一つは今、春のスケジューリング機能を使用することができます。春の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ます。