2016-09-14 11 views
2

私は@scheduledでアノテーションされたeメソッドを持っています。それはかなり長い実行方法です。スレッドプールを使用して同じメソッドを並列に実行する必要があります。出来ますか?コードは次のとおりです。同じ@Sceduledメソッドの並列実行

@Scheduled(fixedRate=100) 
public void run() { 
    Job job = QUEUE.take(); 
    job.run(); //Takes a long time 
} 

QUEUEは多くの仕事を持っていると私は、Springのスケジュール注釈を使用して並列に実行したいと思います。

答えて

1

私はあなたが春の "@Async"を使って、非同期メソッドにJob.runメソッドを変更することができますか、または自分でジョブを実行するためにスレッドプールを作成できる別の方法だと思います。

<task:executor id="myexecutor" pool-size="5" /> 
<task:annotation-driven executor="myexecutor"/> 

/** 
* Created by roman.luo on 2016/9/14. 
*/ 
@Component 
@Scope("prototype") 
public class JobDelegate implements Job { 

    private Job job; 

    public JobDelegate(Job job) { 
     this.job = job; 
    } 

    @Async 
    public void run(){ 
     job.run(); 
    } 
} 

/** 
* Created by roman.luo on 2016/9/14. 
*/ 
@Component 
public class Sceduled extends ApplicationObjectSupport{ 

    @Scheduled(fixedRate = 100) 
    public void run(){ 
     Job job = QUEUE.take(); 
     Job jobDelegate = getApplicationContext().getBean(JobDelegate.class,job); 
     jobDelegate.run(); 
    } 

} 

春のxmlファイルをconfigコン覚えています

関連する問題