我在项目中遇到一个需求:服务运行期间,数据库要定期去监测某表并且更新。

正好项目是使用 jfinal 做的,于是就用了 jfinal-scheduler 插件来解决(jfinal-scheduler 可以用来做定时任务):

配置插件,在自定义的 JFinalConfig 类中引入此插件:

/**
 * 配置插件
 */
public void configPlugin(Plugins me) {
    // ...
    // 定时器插件
    SchedulerPlugin sp = new SchedulerPlugin();
    Runnable task = new Task();
    sp.fixedRateSchedule(task, 60);
    me.add(sp);
    // ...
}

完善线程

public class Task implements Runnable{
    @Override
    public void run() {
        // DML操作
    }
}

完成上述工作之后,我启动服务器,发现在 DML 操作之处必现线程阻塞。然而我将这段 DML 操作放到 Controller 中是能够正常执行并查出数据的。

后来发现原因在这里:

public class SchedulerPlugin implements IPlugin {

    // ...
    private final ScheduledThreadPoolExecutor taskScheduler;

    public SchedulerPlugin() {
        this(getBestPoolSize(), null);
    }

    public ScheduledFuture<?> fixedRateSchedule(Runnable task, int periodSeconds) {
        return taskScheduler.scheduleAtFixedRate(task, 0, periodSeconds, TimeUnit.SECONDS);
    }

    // ...
}

在插件调用 fixedRateSchedule(...) 的时候,会调 ScheduledThreadPoolExecutor.scheduleAtFixedRate(...),第二个参数的意思是第一次启动线程会在多少秒后执行,因为源码中这个参数是 0,也就是马上执行的意思,然而此时数据库还没有连上呢,查询操作自然就出异常了。我把 0 改成了 60,果然,1分钟后,线程启动,运行正常。

用到的源码和jar包:

myaniu-jfinal-scheduler-master.zip

cron4j-2.2.5.zip

JFinal - scheduler 插件做定时任务的更多相关文章

  1. [osg]osgDB的加载机制,使用3DS插件做参考(转,整理现有osgDB资料)

    参考:http://blog.sina.com.cn/s/blog_7cdaf8b60102uzu3.html http://blog.csdn.net/wang15061955806/article ...

  2. 定时任务-----Springboot中使用Scheduled做定时任务----http://www.cnblogs.com/lirenqing/p/6596557.html

    Springboot中使用Scheduled做定时任务---http://www.cnblogs.com/lirenqing/p/6596557.html 已经验证的方案: pom文件加入依赖 < ...

  3. SpringBoot之使用Scheduled做定时任务

    定时任务有好多开源框架比如Quartz,@Scheduled是Spring的一个定时任务注解,通过注解配置就能够轻量级的定时任务,简单方便. 一.@Scheduled注解介绍 这里先贴上@Schedu ...

  4. Asp.Net Core 使用Quartz基于界面画接口管理做定时任务

    今天抽出一点点时间来造一个小轮子,是关于定时任务这块的. 这篇文章主要从一下几点介绍: 创建数据库管理表 创建web项目 引入quarzt nuget 包 写具体配置操作,实现定时任务处理 第一步:创 ...

  5. 使用jquery的imagecropper插件做用户头像上传 兼容移动端

    在移动端开发的过程中,或许会遇到对图片裁剪的问题.当然遇到问题问题,不管你想什么方法都是要进行解决的,哪怕是丑点,难看点,都得去解决掉. 图片裁剪的jquery插件有很多,我也测试过很多,不过大多数都 ...

  6. 用bootstrap的tab插件做一个图层切换效果(感觉会误导淫们,大家当乐子看吧)

    小伙伴们啊,我JS真的是个渣渣,所以总想要偷懒,于是为了实现效果就把tab插件给改了(各位大神轻拍啊,我是小白,很纯洁滴,小心脏也很脆弱)…… 最近做的项目为了考虑以后的移动设备兼容性,所以用了Boo ...

  7. linux真正使用shell脚本做定时任务 关键的Nohup

    网上有很多的文章教大家使用定时任务,所以别的废话我就不多说了 我这里直接有SH来做定时,只是有一点大家不知道,一定要用Nohup,否则用户退出终端以后,SH任务会被自动终止掉 假设有一 tash.sh ...

  8. springboot使用validation 插件做数据校验

    不多说废话. 首先,我们需要在入参实体对象中,使用注解,控制 @Datapublic class UpdateShufflingRequest { private String shuffling_l ...

  9. jenkins中使用tfs插件做增量的版本发布部署

    一 配置介绍 使用jenkins的tfs插件进行,源码的下载,编译,打包的操作,然后使用windows的批处理命令,在局域网内(或者本机)把打包的release包,删除掉web.config,然后靠配 ...

随机推荐

  1. Hessian怎样实现远程调用

    1.Spring中除了提供HTTP调用器方式的远程调用,还对第三方的远程调用实现提供了支持,其中提供了对Hessian的支持. Hessian是由Caocho公司发布的一个轻量级的二进制协议远程调用实 ...

  2. Design and Analysis of Algorithms_Fundamentals of the Analysis of Algorithm Efficiency

    I collect and make up this pseudocode from the book: <<Introduction to the Design and Analysis ...

  3. laravel5.3----------调度任务以及Artisan

    1.在使用的过程中会遇到有些函数不能用需要在php配置文件里面打开: disable_functions = exec,passthru,popen,proc_open,shell_exec,syst ...

  4. opencv 抠图联通块(c接口)

    #include "stdio.h" #include "iostream" #include "opencv/cv.h" #include ...

  5. HTML5Canvas标签(https://developer.mozilla.org)

  6. Android Bitmap转换WebPng图片导致损坏的分析及解决方案

    出现问题的code!!! private void saveImage(String uri, String savePath) throws IOException { // 创建连接 HttpUR ...

  7. 【皇甫】☀IOC和AOP的拓展实例

    <!--构造器注入 --> <bean id="user1" class="cn.happy.entity.User"> <con ...

  8. nodejs cookie管理

    Cookie 管理 我们可以使用中间件向 Node.js 服务器发送 cookie 信息,以下代码输出了客户端发送的 cookie 信息: // express_cookie.js 文件 var ex ...

  9. LDA( Latent Dirichlet Allocation)主题模型 学习报告

    1     问题描述 LDA由Blei, David M..Ng, Andrew Y..Jordan于2003年提出,是一种主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一 ...

  10. 使用sklearn优雅地进行数据挖掘【转】

    目录 1 使用sklearn进行数据挖掘 1.1 数据挖掘的步骤 1.2 数据初貌 1.3 关键技术2 并行处理 2.1 整体并行处理 2.2 部分并行处理3 流水线处理4 自动化调参5 持久化6 回 ...