Spring应用上下文中添加一行配置:
xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd"
元素是Spring自动支持调度和异步方法。这些方法分别使用@Scheduled和@Async来进行标注。
1、声明调度方法
//每隔24小时(86 400 000毫秒)触发一个方法:
@Scheduled(fixedRate=86400000)
public void archiveOldSpittles(){
//...
}
属性fixedRate表明这个方法需要每隔指定的毫秒数进行周期性地调用。在上面的示例中,每次方法开始调用之间要经历86,400,000毫秒。如果你想指定调用之间的间隔(也就是一次调用完成与下一次调用开始之间的间隔),那需要使用fixedDelay属性:
@Scheduled(fixedDelay=86400000)
public void archiveOldSpittles(){
//...
}
在指定间隔后运行任务是很便利的。但是,你可能先概要更精确地控制方法调用。使用fixedRate和fixedDelay只能指定方法调用的频率,但是并不能确定方法在何时调用。为了更确切地指定方法在什么时间调用,可以使用cron属性:
@Scheduled(cron="0 0 0 * * SAT")
public void archiveOldSpittles(){
//...
}
赋予cron属性的值是一个Cron表达式。如果你不熟悉Cron表达式,那么我们详细介绍一下cron属性。Cron表达式由6个(或者7个)空格分隔的时间元素构成。从左至右,元素定义如下:
秒(0-59);
分钟(0-59);
小时(0-23);
月份中的日期(1-31);
月份(1-12 或 JAN-DEC);
星期中的日期(1-7 或 SUN-SAT);
年份(1970-2099);
每个元素都可以显式地指定值、范围、列表或者通配符(*)。月份中的日期和星期中的日期这两个元素是互斥的,因此应该通过设置一个问号(?)来表明你不想设置的那个字段。如下表:
Cron表达式 含义
0 0 10,14,16 * * ? 每天的10点、14点、16点
0 0,15,30,45 * 1-30 * ? 每个月前30天每隔15分钟
30 0 0 1 1 ? 2012 2012年1月1日00:00:30时
0 0 8-17 ? * MON-FRI 每个工作日的工作时间
2、声明异步方法
当谈及面向人类用户的应用程序性能时,会有两种类型的应用性能:实际上的和感知上的。应用程序的实际性能(actual performance),指的是独立测量完成一项操作需要多长时间。实际性能当然很重要,即便实际性能并不理想,但可以通过感知性能改善用户的体验。
感知性能(perceived performance)恰好如其名所示。只要用户能够独立即看到变化,谁会关心背后耗用多少时间呢?例如,假设添加Spittle实际上是耗时的操作。如果同步执行,感知性能就是一个方法的实际性能。在Spittle真正保存之前,用户必须等待。
但是如果SpitterService的saveSpittle()方法可以实现异步执行。那么应用可以在执行后台持久化逻辑时为用户展现一个新的页面。这就是@Async注解所做的事情。
@Async是一个很简单的注解,它没有要设置的属性。你所需要做的就是将其用与Bean的方法上,这个方法就会称为异步的了。
例如
@Async
public void addSpittle(Spittle spittle){
//...
}
就是这样。当saveSpittle()方法被调用的时候,控制权会立即交给调用者。同时,saveSpittle()方法将会在后台继续运行。
你可能想知道如果异步方法需要返回值给调用者会怎么样?如果异步方法立即返回的话,那它如何传递结果给调用者呢?
因为Spring的异步方法是简历在Java的并发API(Javaconcurrency API)之上的,它可以返回实现java.util.concurrent.Future的对象。这个接口代表了一个值的容器,而值能在方法返回后的某个时间点得到,但并不一定是方法返回的时间点。Spring还自带了一个Future的便利实现,名为AsyncResult,借助与它可以更容易地处理未来的值。
例如,假设你有一个异步方法要执行复杂和长时间运行的计算。你希望在后台执行方法,但是还想在方法执行完成时马上看到结果。在这种情况下,你可将方法这样编写:
@Async
public Future performSomeReallyHairyMath(long input){
//...
return new AsyncResult(result);
}
这个方法可以耗用很长的时间来产生结果,与此同时调用者可以执行其他要做的业务。在结果的计算过程中,调用者会持有一个Future对象(实际上是AsyncResult)。
一旦得到结果,调用者可以通过调用Future对象的get()方法来得到它。在此之前,调用者可以使用isDone()和isCancelled()来判断结果的状态。
本文摘自Spring实战14.4调度和后台任务
相关推荐
5、C#定时调度任务服务(Quartz.net做为任务调度核心,利用Log4Net做为日志输出,C#完成WINDOWS服务在后台定时执行任务) 6、android 后台定时执行任务 示例源码 7、C# Quatrz定时任务job实现 8、Quartz.NET定时任务...
功能包含电商模块,会员、SSO、订单、商品、支付、消息、微信、H5和PC、移动端、优惠券、后台系统、任务调度等模块。 项目源代码技术点: SpringBoot+SpringCloud +Maven+Redis+ActiveMQ+XXLJOB(分布式任务调度)+ ...
在基础IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。这个jar 文件为Spring 核心提供了大量扩展。可以找到使用...
包含系统管理,代码生成,多数据库适配,SSO单点登录,工作流,短信,邮件发送,OAuth2登录,任务调度,持续集成,docker部署等功。支持Spring Cloud Alibaba微服务。社区活跃,版本迭代快,加群免费技术支持。
提供任务调度管理后台,可以可视化管理(增删改查任务配置)和查看任务执行情况 失败转移。如果执行任务的节点在获取到任务后挂掉,调度系统会自动将任务发送到其他节点重新执行 调度中心。拥有一个集中式的任务调度...
任务调度:Spring + Quartz 2.2.3 持久层框架:MyBatis 3.4.2 + Mybatis-plus 2.0.1 数据库连接池:Alibaba Druid 1.0 缓存框架:Ehcache 2.6 + Redis 2.9.0 日志管理:SLF4J 1.7 + Log4j2 2.7 布局框架:SiteMesh ...
5.添加定时任务:不再使用作业自动调度框架Quartz实现作业调度,使用spring框架自带的调度器进行作业调度,简化了配置。@Scheduled是单线程的,每次最多只有一个作业在运行,如果调度时间到了作
12. 定时任务:在线添加、修改和删除任务调度(含执行日志)。 13. 代码生成:生成包括 java、html、js、xml、sql。 14. 在线构建器:拖动表单元素生成相应的HTML代码。 15. 连接池监视:监视当期系统数据库连接池状态...
xxl-job-admin 任务调度服务(后台部分) 依赖更新 SpringBoot 1.5.6 JDK 1.8 Doc Blog 后台URL 任务管理 默认(/jobinfo) 搜索(/jobinfo/pageList) 新增任务-保存(/jobinfo/add) 执行(/jobinfo/trigger/{id}) 暂停(/...
## 技术栈 - 后端采用Spring Boot、Spring Security、Redis & Jwt。 - 权限认证使用Jwt,支持多终端认证系统。...- 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 - 代码生成:前后端代码的生成(jav
SpringBoot + Quartz 实现完全可控的定时任务调度,可自定义定时任务具体的实现类 后台采用: SpringBoot + Quartz + MySQL + Redis + JPA 前台采用: Beetl + Layui + Ajax + JS 运行一次:需要确定何时运行 永远...
包含系统管理,代码生成,多数据库适配,SSO单点登录,工作流,短信,邮件发送,OAuth2登录,任务调度,持续集成,docker部署等功。支持Spring Cloud Alibaba微服务。社区活跃,版本… 各领域数据集,工具源码,适合...
定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 系统接口:根据业务代码自动生成相关的api接口文档。 服务监控:监视...
5.添加定时任务:不再使用作业自动调度框架Quartz实现作业调度,使用spring框架自带的调度器进行作业调度,简化了配置。@Scheduled是单线程的,每次最多只有一个作业在运行,如果调度时间到了作业还没执行完,就会...
基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba...模块包括:企业级的认证系统、开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分布式任务调度、接口文档、代码生成等等。
对账模块 采用轻量级的批处理框架SpringBatch框架进行日终交易清算时的对账处理,同时使 用SpringBoot类库中的ThreadPoolTaskScheduler类实现对账模块的定时任务调度。 后台管理模块用于银行工作人员对本系统业务...
主要介绍了Java Spring中Quartz调度器详解及实例的相关资料,需要的朋友可以参考下
搭建说明 1. 将下载的项目导入到IDEA 2. 修改 spring-cache.xml 文件,配置自己的redis链接 3. 修改 jdbc.properties 文件,配置自己...5.使用 Quartz作为任务调度方案 6.使用ElasticSearch作为全文检索与数据分析方案
模块包括:定时任务调度、服务器监控、平台监控、平台设置、开发平台、单点登录、Redis分布式高速缓存、会员、营销、在线用户、日志、在线人数、访问次数、调用次数、直接集群、接口文档、生成模块、代码实例、安装...