2017-02-28 14 views
0

バックグラウンドでジョブを開始したいので、アプリケーション内のすべてのリソースを使用せず、アプリケーションの通常のタスクに影響を与えることができます。実行中のJavaアプリケーションから開始し、コマンドラインからは実行しないでください。Springバッチジョブをバックグラウンドスレッドとして開始する方法

Springスケジューリングを使用してバックグラウンドタスク/デーモンとしてSpringバッチジョブを開始する方法を知っている人はいますか?

+0

Spring Scheduler(https://spring.io/guides/gs/scheduling-tasks/)を使用してタスクをスケジュールすることができます。リソース消費に関しては、それに影響する多くの要素があります。さらに悪いケースは、メモリが相対的に安価である(つまり、どこかでホストされている場合)必要に応じて、より多くのメモリを購入することだけです。 – SL07

+0

私はSpring Schedulerを使うことができますが、Spring Schedulerがスレッド優先度の低いスレッドのようなデーモンを実際に作成するのは100%ではありません。これを検証する方法はありますか?また、私の特定のユースケースでは、ジョブは実際には1回だけ実行する必要があり、それ自体を繰り返すようにスケジュールするべきではありません。 – Tranquilized

+0

Spring Schedulerがloスレッド優先度で動作することを検証できません。それが一度だけ実行されるジョブであれば、そのスクリプトを書くほうが簡単かもしれません。 Springアプリケーションを使用して、必要な条件に基づいてそのスクリプトを実行できます。 – SL07

答えて

0

もう少し調査したところ、私はJobLauncherのTaskExecuterを構成できることが分かった。次に、SimpleAsyncTaskExectorを使用してデーモンとして設定し、スレッドの優先度を設定できます。

@Bean 
public JobLauncher jobLauncher(final JobRepository jobRepository, final TaskExecutor taskExecutor) { 

    final SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); 
    jobLauncher.setJobRepository(jobRepository); 
    jobLauncher.setTaskExecutor(taskExecutor); 
    return jobLauncher; 
} 

@Bean 
public TaskExecutor taskExecutor() { 

    SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor(); 
    taskExecutor.setDaemon(true); 
    taskExecutor.setThreadPriority(Thread.MIN_PRIORITY); 
    return taskExecutor; 
} 
関連する問題