并行执行相同的@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"/>
我有一个用@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"/>