Spring的@Scheduled注释如何工作?

时间:2016-04-28 21:06:04

标签: java spring spring-scheduled

在我的应用程序中,我在3个不同的类中有3个预定方法:

@Component
public class ClassA {
@Scheduled(fixedDelay = 5000L)
    public void methodA(){
        //do task "A"
    }
}

@Component
public class ClassB {
@Scheduled(fixedDelay = 5000L)
    public void methodB(){
        //do task "B"
    }
}

@Component
public class ClassF {
@Scheduled(fixedDelay = 5000L)
    public void methodF(){
        //do task "F"
    }
}

在app applicationContext中有以下几行:

<task:annotation-driven executor="myExecutor" scheduler="scheduler"/>
<task:executor id="myExecutor"/>
<task:scheduler id="scheduler"/>

我无法从日志文件中找到它,所以这是我的问题:

  • 这些方法如何执行?并行或相继?如果相继,那么如何将其重新配置为并行工作?
  • 这种配置是多线程的(对于每种方法)是否(如果不是 - 再次,如何更改)?

1 个答案:

答案 0 :(得分:4)

它在后台使用java Executor api。 您需要知道的所有内容都可以在documentation

中找到

您基本上选择了TaskExecutor实现,然后设置了您想要的处理线程数。

在您的示例中,将以5秒的固定延迟连续执行3种方法。但是如果只定义一个处理线程,并且一个方法需要很长时间,那么其他两个方法的执行将被推迟。 如果您不想依赖于使用@Scheduled执行的其他函数,则在此示例中需要3个处理线程。