并行执行相同的@Sceduled方法

时间:2016-09-14 04:44:29

标签: java spring spring-scheduled

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

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

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

1 个答案:

答案 0 :(得分:1)

我认为您可以通过使用spring" @ Async"或者您可以创建自己的线程池来执行作业的其他方式将Job.run方法更改为异步方法。

/**
 * 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"/>