并行执行相同的@Sceduled 方法

Parallel execution of the same @Sceduled method

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

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

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

我认为您可以通过使用 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"/>