play framework 添加启动任务、定时任务

转载 2015年07月21日 09:55:27

前人总结了很多东西,真的受益良多,有一个详细的博客在这里,看完立马就明白,我这里只是做一个记录,方便日后查找

http://desert3.iteye.com/blog/1586708


Play framework是一个web应用程序,大部分的应用逻辑都是通过在Controllers中以响应HTTP请求的方式来完成的。 

有时候你可能需要执行一些和HTTP请求无关的应用逻辑。这在处理一些初始化任务、维护任务、不阻塞HTTP请求连接池的耗时任务时非常有用。 

Jobs是完全受Framework管理的。也就是说play框架会为你管理所有数据库连接事宜、JPA entity manager同步、事物管理。 

要创建一个Job,只需要简单地继承play.jobs.Job类就可以。 

Java代码  收藏代码
  1. package jobs;  
  2.    
  3. import play.jobs.*;  
  4.    
  5. public class MyJob extends Job {  
  6.       
  7.     public void doJob() {  
  8.         // execute some application logic here ...  
  9.     }  
  10.       


如果Job需要返回值的话,那么覆盖doJobWithResult()方法即可。 
Java代码  收藏代码
  1. package jobs;  
  2.    
  3. import play.jobs.*;  
  4.     
  5. public class MyJob extends Job<String> {  
  6.       
  7.     public String doJobWithResult() {  
  8.         // execute some application logic here ...  
  9.         return result;  
  10.     }  
  11.       
  12. }  

这里的String只是一个例子,你可以用任何其他类型。 

引导Job(Bootstrap job): 
Bootstrap jobs是在play应用程序启动的时候被执行(注意DEV、PROD模式的区别)。通过@OnApplicationStart注解就可以把一个job标记为bootstrap job。 
Java代码  收藏代码
  1. import play.jobs.*;  
  2.    
  3. @OnApplicationStart  
  4. public class Bootstrap extends Job {  
  5.       
  6.     public void doJob() {  
  7.         if(Page.count() == 0) {  
  8.             new Page("root").save();  
  9.             Logger.info("The page tree was empty. A root page has been created.");  
  10.         }  
  11.     }  
  12.       
  13. }  

对于Bootstrap jobs不需要返回值,即使你做了,返回值也会丢失。 
默认情况下,所有被@OnApplicationStart注解标记的job按顺序执行完成后,应用程序才开始处理进来的HTTP请求。 
如果你想要在应用程序启动时就开始一个job,同时,你想不等这个job执行完就直接开始处理进来的HTTP请求,你可以如下这样通过给注解增加async=true这个参数来达到要求的效果:@OnApplicationStart(async=true)。 
所有@OnApplicationStart(async=true)标记的job在应用程序启动时会自动启动,并且所有这些异步job是在同一时刻启动的。 

定时任务: 
定时任务就是play框架根据用户的设置周期性地执行任务。使用@Every注解来标记job每隔多久执行一次。 
Java代码  收藏代码
  1. import play.jobs.*;  
  2.    
  3. @Every("1h")  
  4. public class Bootstrap extends Job {  
  5.       
  6.     public void doJob() {  
  7.         List<User> newUsers = User.find("newAccount = true").fetch();  
  8.         for(User user : newUsers) {  
  9.             Notifier.sayWelcome(user);  
  10.         }  
  11.     }  
  12.       
  13. }  

如果@Every不够用的话,也可以使用更加灵活的@On注解来设置定时任务的时间间隔@On的设置采用的是CRON表达式。 
Java代码  收藏代码
  1. import play.jobs.*;  
  2.    
  3. /** Fire at 12pm (noon) every day **/   
  4. @On("0 0 12 * * ?")  
  5. public class Bootstrap extends Job {  
  6.       
  7.     public void doJob() {  
  8.         Logger.info("Maintenance job ...");  
  9.         ...  
  10.     }  
  11.       
  12. }  

定时任务时,也不需要返回值,即使你做了,返回值也会丢失。 

触发task jobs: 
在任何时候,你都可以通过调用job实例的now()方法来触发job来执行一个特殊的任务。然后这个job就会以非阻塞的方式被立即执行。 
Java代码  收藏代码
  1. public static void encodeVideo(Long videoId) {  
  2.     new VideoEncoder(videoId).now();  
  3.     renderText("Encoding started");  
  4. }  

在job实例上调用now()方法,将会返回一个Promise约定的值。当job完成后,你可以用Promise来接收job的执行结果。看怎么做的?? 

应用程序关闭时执行的任务: 
可以通过@OnApplicationStop注解来声明在应用程序关闭时要执行的job。 
Java代码  收藏代码
  1. import play.jobs.*;  
  2. @OnApplicationStop  
  3. public class Bootstrap extends Job {  
  4. public void doJob() { Fixture.deleteAll(); }  
  5. }  


play框架使用起来(11)

Job  由于Play是Web应用框架,所以大部分的应用逻辑是由响应HTTP请求的控制器来完成的。但是有时候我们需要在HTTP请求之外执行一些应用逻辑操作,比如初始化工作,维护任务或者在不阻塞H...
  • zyhlal
  • zyhlal
  • 2016年11月03日 17:57
  • 1086

Play 1.x框架学习之四:定时作业调度 (job scheduler In play framework)

Play框架提供了定时执行任务的功能模块,也就是Job。大家可以用来做一些定时的任务,如数据汇总,定时同步等。play使用了Quartz项目。可以轻松地定制调度任务的时间。Play框架还预置了几种调度...
  • maguanghui_2012
  • maguanghui_2012
  • 2017年01月13日 17:57
  • 503

akka 定时任务实例for play2.1

有时需要设定将来发生的事情,这时该怎么办?ActorSystem搞定一切!     在那儿你能找到scheduler方法,它返回一个 akka.actor.Scheduler 实例, 这个实例在每个...
  • w_j_w2010
  • w_j_w2010
  • 2015年11月18日 14:12
  • 2085

Play framework 1.2.3 Jobs定时任务、异步任务、引导任务、触发任务、关闭任务

Play framework是一个web应用程序,大部分的应用逻辑都是通过在Controllers中以响应HTTP请求的方式来完成的。 有时候你可能需要执行一些和HTTP请求无关的应用逻辑。这在...
  • maguanghui_2012
  • maguanghui_2012
  • 2017年02月06日 13:16
  • 1243

play framework学习笔记之 非HTTP环境下执行任务使用job

Asynchronous execution using jobs一下略一下,以后再写
  • suncaishen
  • suncaishen
  • 2011年04月18日 15:39
  • 1551

【笔记】play2定时任务设置

之前用play开发应用时,涉及到定时任务,都是在数据库里实现的。 后来偶然发现,其实在play里面也是可以设置定时任务的,主要使用Akka。 Akka 是一个用 Scala 编写的库,用于简化编写容错...
  • chj362
  • chj362
  • 2016年05月04日 14:23
  • 277

playframework 2.2 创建定时任务计划程序

通过AkkA及Ator 在play2下实现任务计划程序的开发。 操作流程: 创建全局配置类文件 /app/Global.scala 代码内容如下: /** * Created b...
  • w_j_w2010
  • w_j_w2010
  • 2015年11月18日 15:08
  • 1396

play开发手册,数据库开发,配置,单元测试,定时任务等相关文档

  • 2017年08月11日 16:22
  • 185KB
  • 下载

play_第一步_安装、配置、启动

PLAY, 如果初学框架的时候就使用这个就不必遇到那么多麻烦的事情了(当然那些麻烦的配置, 调试也帮助我们更快的成长)。 首先当然要去官网下载这个框架http://www.playframework...
  • jintaiyong
  • jintaiyong
  • 2012年02月14日 23:14
  • 7043

在eclipse 下 启动 play和debug play项目

在eclipse里面的 play 项目 的 生成的 eclipse 文件夹 里面有三个 launch文件 项目名 .  launch 右键 run 就可以在eclipse 里面 启动 play项目了...
  • suncaishen
  • suncaishen
  • 2011年10月09日 10:24
  • 4724
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:play framework 添加启动任务、定时任务
举报原因:
原因补充:

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