`
desert3
  • 浏览: 2158608 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

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

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

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

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

要创建一个Job,只需要简单地继承play.jobs.Job类就可以。
package jobs;
 
import play.jobs.*;
 
public class MyJob extends Job {
    
    public void doJob() {
        // execute some application logic here ...
    }
    

}
如果Job需要返回值的话,那么覆盖doJobWithResult()方法即可。
package jobs;
 
import play.jobs.*;
  
public class MyJob extends Job<String> {
    
    public String doJobWithResult() {
        // execute some application logic here ...
        return result;
    }
    
}

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

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

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

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

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

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

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

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

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

参考:Asynchronous Jobs
分享到:
评论
2 楼 feihangchen 2016-08-01  
@OnApplicationStop 
public class Bootstrap extends Job { 
public void doJob() {  } 
}

以上代码如何停止所有的定时器。有时需要重启应用服务,希望在重启之前先让所有定时器停止工作。
1 楼 hw04551 2013-08-01  
楼主你好
我也用playframwork,在应用中我启动了好几个Job去执行对应的数据解析,现在遇到一个问题,这个几个Job执行一段时间后,其中一个或这个几个会停止工作,日志中也没有任何的异常信息出现。好像Job在执行过程中阻塞了一样,Job都是3秒执行一次。请问该怎么解决Job停止工作的现象。

相关推荐

    playFramework1.2.3

    在标题"playFramework1.2.3"中,我们关注的是Play Framework的1.2.3版本。这个版本是在其早期发展的一个稳定版本,提供了许多开发者友好的功能。 Play Framework的核心优势在于它采用了模型-视图-控制器(MVC)架构...

    NC预警及后台任务使用说明

    - **触发配置**:设置预警产生的时机,包括即时和定时两种方式。 - **消息接收配置**:指定预警信息的接收者,确保消息能准确无误地传达给相关人员。 #### 二、后台任务 后台任务是指在不需要用户直接参与的情况下...

    电脑定时关机 1.2.3绿色注册版

    电脑定时关机软件是计算机用户常用的一种工具,主要用于在预设的时间自动关闭计算机,从而实现省电、节能或安排无人值守时的操作。"电脑定时关机 1.2.3绿色注册版"是一款专为此目的设计的应用程序,其特点在于绿色免...

    robotframework-ride-1.2.3.win-amd64

    robotframework-ride-1.2.3.win-amd64robotframework-ride-1.2.3.win-amd64robotframework-ride-1.2.3.win-amd64

    jetm-1.2.3.tar.gz

    开发者可以设定定时任务,如周期性执行某项操作,或者在特定时间点触发特定事件。 5. **线程模型(Thread Model)**:JetM提供了多种线程模型以适应不同的应用场景。这些模型包括单线程、多线程以及工作线程池等,...

    streamx-console-service_2.11-1.2.3.tar.gz

    4. **报警机制**:当任务出现异常或者性能指标超出预设范围时,Console Service能触发报警,通过邮件、短信等方式通知相关人员。 5. **版本控制**:支持任务版本管理,可以回滚到历史版本,便于进行版本对比和问题...

    Python库 | dead_simple_framework-1.2.3-py3-none-any.whl

    在Python中,`dead_simple_framework-1.2.3-py3-none-any.whl`是一个特定版本的Python库文件,它代表了一个名为`dead_simple_framework`的框架,版本号为1.2.3。这种文件格式被称为wheel文件,是Python的二进制分发...

    xdoclet-bin-1.2.3

    《XDoclet-Bin-1.2.3:自动化Java文档和代码生成工具》 XDoclet是一款在Java开发领域广泛应用的开源工具,其主要功能是通过解析Java源代码中的特定注解(annotations),自动生成相应的文档、部署描述符(如web.xml...

    jetm-samples-1.2.3.gz

    总之,"jetm-samples-1.2.3.gz"是一个帮助开发者理解和使用JetM框架的重要资源,它包含了具体实现的代码示例,对于深入学习和实践事件管理和定时任务处理有着极大的价值。通过研究这些示例,开发者可以提升自己的...

    NPOI 1.2.3 编译版

    无论是创建新的工作簿,还是读取和编辑现有文件,NPOI都提供了一套完善的API,使得这些任务变得简单且高效。对于那些在C#项目中需要与Excel打交道的开发者来说,NPOI无疑是一个值得考虑的优秀选择。

    SteamVR1.2.3.zip

    【SteamVR 1.2.3 - 全面解析虚拟现实技术的新篇章】 在虚拟现实(VR)领域,SteamVR是不可或缺的一部分,它为开发者和用户提供了一个强大的平台,用于体验和创建各种VR内容。SteamVR 1.2.3版本的发布,标志着这一平台...

    play-1.2.4.zip

    Play框架是Scala和Java开发Web应用的一个强大工具,1.2.4版本是它的一个较早发行版。Play框架以其MVC(Model-View-Controller)架构和"开发即运行"的理念著称,使得开发过程更为高效。在这个"play-1.2.4.zip"压缩包...

    jquery easyUI 1.2.3 api

    **jQuery EasyUI 1.2.3 API 深度解析** jQuery EasyUI 是一个基于 jQuery 的前端框架,它提供了一系列轻量级、易于使用的组件,帮助开发者快速构建功能丰富的 Web 应用程序。EasyUI 1.2.3 版本是其历史版本之一,...

    orabbix-1.2.3.zip

    《Orabbix 1.2.3:Zabbix监控的得力助手》 Orabbix是一款针对Zabbix监控系统进行扩展和优化的工具,其1.2.3版本在兼容性上迈出了重要的一步,不仅能够与Zabbix 4无缝对接,还能够支持最新的Zabbix 5版本,这为用户...

    jquery.1.2.3

    jquery1.2.3 jquery1.2.3 jquery1.2.3 jquery1.2.3

Global site tag (gtag.js) - Google Analytics