文档章节

Scheduling Tasks

Rksi5
 Rksi5
发布于 2014/11/21 02:59
字数 331
阅读 637
收藏 4

在spring的<task:*> XML名字空间功能一样,使用在Configuration类如下:
    @Configuration
    @EnableScheduling
    public class AppConfig {
        //@Bean 定义
    }
    在spring容器管理bean中检测@Scheduled注解。如:
    package com.myco.task;
    public class MyTask {
        @Scheduled(fixedRate=1000)
        public void work() {
            //task execution logic
        }
    }
    
    下面的配置保证MyTask.work()每1s调用一次
    @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接口。
    这容许访问底层实例,怎样定制Executor执行调度任务:
    @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);
        }
    }
    //destroyMethod="shutdown"当spring应用上下文关闭时确保任务执行器能正确的关闭
    实现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();
        }
    }

© 著作权归作者所有

共有 人打赏支持
Rksi5
粉丝 1
博文 41
码字总数 50463
作品 0
深圳
程序员
私信 提问
GANTTIC 3.1 发布,项目管理系统

GANTTIC 是一个基于Web的项目管理系统,用于安排项目过程中各种资源的协作,提供了用户友好的图形化界面和交互式甘特图,实现实时的协作功能。可作为微软 Project 工具的替换品。 Changes: 1...

红薯
2011/04/07
498
2
Spring boot 使用Scheduling Tasks笔记

前言:spring boot版本是2.0.5 创建好maven工程后,完成pom文件,如下: 只需要两个依赖和一个插件 下面是代码: 下面是springboot启动类 启动程序后验证程序结果: 参考资料: Scheduling T...

休辞醉倒
10/12
0
0
JAVA CONCURRENCY EXECUTORS 介绍Java并发处理线程池

I would make a fool out of myself if I tell you that util.concurrent APIs kicks cheetah's ass when the classes are available since 2004. However, there are some cool features wh......

Oscarfff
2016/05/20
40
0
海洋饼干/dotnet-tpl-dataflow

TPL Dataflow This project is a complete port of the System.Threading.Tasks.Dataflow assembly to support .NET 4.0 and newer. TPL Dataflow promotes actor/agent-oriented designs th......

海洋饼干
2015/04/05
0
0
集群管理器--Apache Mesos

Apache Mesos是一个集群管理器,提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行Hadoop、MPI、Hypertable、Spark。 特性: Fault-tolerant replicated master using ZooKeeper...

匿名
2012/01/08
15.3K
3

没有更多内容

加载失败,请刷新页面

加载更多

如何解决 homebrew 更新慢的问题

之前一直困扰于 Homebrew 的更新速度,曾试过修改更新源(清华、中科大等)的方式,但是并没什么卵用;也试过设置 curl 代理的方式,但是 brew 走的好像不是 curl 的方式,所以也没用。 通过...

whoru
15分钟前
1
0
TiDB EcoSystem Tools 原理解读系列(二)TiDB-Lightning Toolset 介绍

简介 TiDB-Lightning Toolset 是一套快速全量导入 SQL dump 文件到 TiDB 集群的工具集,自 2.1.0 版本起随 TiDB 发布,速度可达到传统执行 SQL 导入方式的至少 3 倍、大约每小时 100 GB,适合...

TiDB
17分钟前
1
0
【Visual Studio 扩展工具】如何在ComponentOneFlexGrid树中显示RadioButton

概述 在ComponentOne Enterprise .NET控件集中,FlexGrid表格控件是用户使用频率最高的控件之一。它是一个功能强大的数据管理工具,轻盈且灵动,以分层的形式展示数据(数据呈现更加直观)。...

葡萄城技术团队
19分钟前
1
0
Maven环境隔离

Maven环境隔离 1. 什么是Maven环境隔离 顾名思义,Maven环境隔离就是将开发中的环境与beat环境、生产环境分隔开,方便进行开发和维护。这个在实际项目中用的还是很多的,如果你的项目用的Mav...

蚂蚁-Declan
19分钟前
3
0
day182-2018-12-19-英语流利阅读-待学习

“性感”时代已去,维密将如何转身? Daniel 2018-12-19 1.今日导读 维多利亚的秘密(Victoria's Secret)这个内衣品牌,最近似乎步入了“中年危机”——曾经打遍天下的“性感”内衣,在主打...

飞鱼说编程
20分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部