zoukankan      html  css  js  c++  java
  • Spring注解方式实现任务调度【官方文档翻译】

    原文:http://docs.spring.io/spring/docs/4.0.1.BUILD-SNAPSHOT/javadoc-api/
    
    注解类型:EnableScheduling
    
    @Target(value=TYPE) 
    @Retention(value=RUNTIME)
    @Import(value=SchedulingConfiguration.class)
    @Documented
    public @interface EnableScheduling
    使用该注解让Spring可以进行任务调度,功能类似于Spring的xml命名空间<task:*>
    
    使用 @EnableScheduling 注解的类示例:
    
    @Configuration
    @EnableScheduling
    public class AppConfig {
        // 各种@bean的定义
        // various @Bean definitions
    }
    使用@Scheduled注解可以被Spring容器检测。使用示例:
    
    package com.myco.tasks;
    
    public class MyTask {
         @Scheduled(fixedRate=1000)
         public void work() {
             // 任务执行逻辑
             // task execution logic
         }
     }
    下面的配置使MyTask.work()每1000毫秒被执行一次:
    
    @Configuration
    @EnableScheduling
    public class AppConfig {
        @Bean
        public MyTask task() {
            return new MyTask();
        }
    }
    如果MyTask使用了@Component注解,下面的配置方式也可以让使用了@Scheduled注解的方法在设置的时间间隔里面被调用:
    
    @Configuration
    @ComponentScan(basePackages="com.myco.tasks")
    public class AppConfig {
    }
    使用了@Scheduled注解方法也可以在使用了@Configuration注解的类里面使用:
    
    @Configuration
    @EnableScheduling
    public class AppConfig {
        @Scheduled(fixedRate=1000)
        public void work() {
            // task execution logic
        }
    }
    上面介绍的都是在单线程的情况下执行任务调度的。如果希望进行更多的控制,我们可以让使用@Configuration注解的类实现SchedulingConfigurer接口,这样就可以访问底层的ScheduledRegistrar实例。
    
    下面的例子演示如何定制Executer去执行任务计划:
    
    @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);
        }
    }
    注意上面例子中使用的@bean(destroyMethod="shutdown")。这样是为了确保当Spring应用上下文关闭的时候任务执行者也被正确地关闭。实现SchedulingConfigurar接口还允许细粒度控制任务通过ScheduledTaskRegistrar进行登记。
    
    例如,下面的配置使用自定义的Trigger执行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();
         }
     }
    作为参考,上面的例子和下面使用XML配置方式的作用是一样的:
    
    <beans>
        <task:annotation-driven scheduler="taskScheduler"/>
        <task:scheduler id="taskScheduler" pool-size="42"/>
        <task:scheduled ref="myTask" method="work" fixed-rate="1000"/>
        <bean id="myTask" class="com.foo.MyTask"/>
    </beans>
    
  • 相关阅读:
    Understanding about Baire Category Theorem
    Isometric embedding of metric space
    Convergence theorems for measurable functions
    Mindmap for "Principles of boundary element methods"
    Various formulations of Maxwell equations
    Existence and uniqueness theorems for variational problems
    Kernels and image sets for an operator and its dual
    [loj6498]农民
    [luogu3781]切树游戏
    [atAGC051B]Three Coins
  • 原文地址:https://www.cnblogs.com/interdrp/p/3599917.html
Copyright © 2011-2022 走看看