spring EnableScheduling标签使用详解

原创 2017年08月29日 06:36:39




@Target(value=TYPE)

 @Retention(value=RUNTIME)

 @Import(value=SchedulingConfiguration.class)

 @Documented

public@interfaceEnableScheduling

Enables Spring's scheduled task execution capability, similar tofunctionality found in Spring's <task:*> XML namespace. To be used on @Configuration classes as follows:( 启用Spring调度任务执行功能,类似于Spring<task:*> XML命名空间中的功能。要在@Configuration类中使用如下:)

@Configuration
 @EnableScheduling
 public class AppConfig {
 
     // various @Bean definitions
 }

This enables detection of @Scheduled annotations on any Spring-managed bean in the container. Forexample, given a class MyTask(这样可以检测容器中任何Spring管理的bean上的@Scheduled注释。 例如,给定一个类MyTask)

package com.myco.tasks;
 
 public class MyTask {
 
     @Scheduled(fixedRate=1000)
     public void work() {
         // task execution logic
     }
 }

the following configuration would ensure that MyTask.work() is called once every 1000 ms:(以下配置将确保每1000ms调用一次MyTask.work())

@Configuration
 @EnableScheduling
 public class AppConfig {
 
     @Bean
     public MyTask task() {
         return new MyTask();
     }
 }

Alternatively, if MyTask were annotated with @Component, the following configuration would ensure thatits @Scheduled method is invoked at the desired interval:( 或者,如果MyTask用@Component注释,则以下配置将确保以所需间隔调用其@Scheduled方法:)

@Configuration
 @EnableScheduling
 @ComponentScan(basePackages="com.myco.tasks")
 public class AppConfig {
 }

Methods annotated with @Scheduled may even be declared directly within @Configuration classes: (@Scheduled注释的方法甚至可以直接在@Configuration类中声明:)

@Configuration
 @EnableScheduling
 public class AppConfig {
 
     @Scheduled(fixedRate=1000)
     public void work() {
         // task execution logic
     }
 }

By default, will be searching for an associated scheduler definition:either a unique TaskScheduler bean in the context, or a TaskScheduler bean named "taskScheduler" otherwise; the samelookup will also be performed for a ScheduledExecutorService bean. If neither of the two is resolvable, a localsingle-threaded default scheduler will be created and used within the registrar. 默认情况下,将搜索关联的调度程序定义:上下文中的唯一TaskScheduler bean,否则命名为“taskScheduler”的TaskScheduler bean; 对于ScheduledExecutorService bean也将执行相同的查找。 如果两者都不可解析,则将在注册器中创建并使用本地单线程默认调度程序。

When more control is desired, a @Configuration class may implement SchedulingConfigurer. This allows access to the underlying ScheduledTaskRegistrar instance. For example, the following example demonstrates howto customize the Executor used to execute scheduled tasks: (当需要更多的控制时,@Configuration类可以实现SchedulingConfigurer。 这允许访问底层的ScheduledTaskRegistrar实例。 例如,以下示例演示了如何自定义用于执行计划任务的执行程序:)

@Configuration
 @EnableScheduling
 public class AppConfig implements SchedulingConfigurer {
 
     @Override
     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
         taskRegistrar.setScheduler(taskExecutor());
     }
 
     @Bean(destroyMethod="shutdown")
     public Executor taskExecutor() {
         return Executors.newScheduledThreadPool(100);
     }
 }

Note in the example above the use of @Bean(destroyMethod="shutdown"). This ensures that the task executor is properlyshut down when the Spring application context itself is closed. (注意在上面的例子中使用@Bean(destroyMethod =“shutdown”)。这确保了在Spring应用程序上下文本身关闭时,任务执行程序被正确关闭。)

Implementing SchedulingConfigurer also allows for fine-grained control over task registrationvia the ScheduledTaskRegistrar. For example, the following configures theexecution of a particular bean method per a custom Trigger implementation: (实现SchedulingConfigurer还允许通过ScheduledTaskRegistrar对任务注册进行细粒度的控制。 例如,以下配置每个自定义触发器实现的特定bean方法的执行:)

@Configuration
 @EnableScheduling
 public class AppConfig implements SchedulingConfigurer {
 
     @Override
     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
         taskRegistrar.setScheduler(taskScheduler());
         taskRegistrar.addTriggerTask(
             new Runnable() {
                 public void run() {
                     myTask().work();
                 }
             },
             new CustomTrigger()
         );
     }
 
     @Bean(destroyMethod="shutdown")
     public Executor taskScheduler() {
         return Executors.newScheduledThreadPool(42);
     }
 
     @Bean
     public MyTask myTask() {
         return new MyTask();
     }
 }

For reference, the example above can be compared to the following SpringXML configuration: (作为参考,上述示例可以与以下SpringXML配置进行比较:)

<beans>
 
     <task:annotation-driven scheduler="taskScheduler"/>
 
     <task:scheduler id="taskScheduler" pool-size="42"/>
 
     <task:scheduled-tasks scheduler="taskScheduler">
         <task:scheduled ref="myTask" method="work" fixed-rate="1000"/>
     </task:scheduled-tasks>
 
     <bean id="myTask" class="com.foo.MyTask"/>
 
 </beans>

The examples are equivalent save that in XML a fixed-rate period is used instead of a custom Trigger implementation; this is because the task: namespace scheduled cannot easily expose such support. This is but onedemonstration how the code-based approach allows for maximum configurabilitythrough direct access to actual componentry. (这些示例是等效的,除了在XML中使用固定速率周期而不是自定义触发器实现; 这是因为任务:命名空间调度不能轻易暴露出这样的支持。这只是一个演示,基于代码的方法如何通过直接访问实际组件来实现最大的可配置性。)


参考资料链接:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableScheduling.html

 


版权声明:本文为博主原创文章,未经博主允许不得转载。

【Spring】Spring高级话题-计划任务-@EnableScheduling

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自【大学之旅_谙忆的博客】 【Spring】基于IntelliJ IDEA搭建Maven分析要实现计划任务,首先...
  • qq_26525215
  • qq_26525215
  • 2016年12月09日 20:22
  • 13400

【Spring】Spring高级话题-计划任务-@EnableScheduling

进行本示例的演示,需要先配置好Maven和spring哦、  见:  http://blog.csdn.net/qq_26525215/article/details/53010442 ...
  • qq_34082034
  • qq_34082034
  • 2017年07月25日 09:10
  • 904

【Spring】Spring高级话题-@Enable***注解的工作原理

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自【大学之旅_谙忆的博客】 @EnableAspectJAutoProxy @EnableAspect...
  • qq_26525215
  • qq_26525215
  • 2016年12月09日 21:11
  • 13954

Spring @EnableScheduling 注解解析

概述Spring 的@EnableScheduling 为我们提供了快速的基于多种规则的任务调度功能。在《Spring 4.x Task 和 Schedule 概述》一文中对Spring 实现的异步任...
  • TRAMP_ZZY
  • TRAMP_ZZY
  • 2017年08月24日 23:12
  • 1415

Spring任务调度Scheduling Tasks

注解方式第一步、创建maven工程,引入依赖 org.springframework.boot spring-boot-starter-parent 1.4.0.RELEASE...
  • u014513883
  • u014513883
  • 2016年08月29日 21:23
  • 4585

spring定时任务

参考资料:Spring Framework Reference Documentation 3.2.4.RELEASE的Part VI. Integration的27. Task Execution ...
  • xiejx618
  • xiejx618
  • 2014年07月28日 23:38
  • 5722

spring定时任务详解(@Scheduled注解)

在springMVC里使用spring的定时任务非常的简单,如下: (一)在xml里加入task的命名空间 xmlns:task="http://www.springframework.org/sc...
  • qq_33556185
  • qq_33556185
  • 2016年07月07日 17:09
  • 69048

Spring @Scheduled定时任务动态修改cron参数

Spring框架自3.0版本起,自带了任务调度功能,好比是一个轻量级的Quartz,而且使用起来也方便、简单,且不需要依赖其他的JAR包。秉承着Spring的一贯风格,Spring任务调度的实现同时支...
  • xht555
  • xht555
  • 2016年11月10日 22:36
  • 14605

Spring 注解学习

Spring以及其他分支框架注解开发,在学习和工作中总结的一小部分,希望能帮到大家...
  • sudiluo_java
  • sudiluo_java
  • 2016年07月08日 10:43
  • 6281

spring 注解方式配置定时任务

一、注解的方式 1:spring 配置文件中增加这句 2:确保扫描程序能够扫描后 下面第3步骤的java类 3:AnnotationQuartz.javapackage cms; impor...
  • chenaini119
  • chenaini119
  • 2016年08月08日 13:53
  • 1998
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring EnableScheduling标签使用详解
举报原因:
原因补充:

(最多只允许输入30个字)