2016-09-14 132 views
2

我有用@scheduled注解的e方法。它是一个相当长的运行方法。我需要使用线程池并行运行相同的方法。可能吗?代码是:并行执行相同的@Sceduled方法

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

QUEUE有很多工作,我想用Spring的Scheduled注解并行运行它们。

回答

1

我认为你可以通过使用spring的“@Async”或者你可以创建自己的线程池来完成Job的Job.run方法改变为Asynchronous方法。

/** 
* 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(); 
    } 

} 

记得配置Spring的XML文件:

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