首页 > 代码库 > JFinal - scheduler 插件做定时任务
JFinal - scheduler 插件做定时任务
基于 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); } // ... }
在定时器插件调用这个方法的时候,会调 ScheduledThreadPoolExecutor 的 scheduleAtFixedRate 方法,第二个参数的意思是第一次启动线程会在多少秒后执行,因为源码中这个参数是 0,也就是马上执行的意思,然而此时数据库还没有连上呢,查询操作自然就出异常了。
用到的源码和jar包:
myaniu-jfinal-scheduler-master.zip
cron4j-2.2.5.zip
JFinal - scheduler 插件做定时任务
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。