jfinal-QuartzPlugin后台任务调度
配置方法:
1. 在jfinal的Start.java中插件位置配置QuartzPlugin
/**
* 配置插件
*/
public void configPlugin(Plugins me)
{
// 配置druid数据库连接池插件
String driver = getProperty("driverClass");
DruidPlugin druidPlugin = new DruidPlugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password"), driver); //集成druid的插件
druidPlugin.addFilter(new StatFilter());
druidPlugin.setInitialSize(3).setMaxActive(10);
WallFilter wall = new WallFilter();
wall.setDbType("mysql");
druidPlugin.addFilter(wall);
me.add(druidPlugin); // 配置ActiveRecord插件
ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
//显示执行的sql语句
//arp.setShowSql(true);
me.add(arp);
//
// // 映射表到模型
// arp.addMapping("t_sys_loginperson", Loginperson.class);
// arp.addMapping("t_sys_login", Login.class);
// arp.addMapping("t_sys_organization", Organization.class);
// arp.addMapping("t_sys_person", Person.class);
//
// arp.addMapping("t_sys_role", Role.class);
// arp.addMapping("t_sys_role_menu", RoleMenu.class); QuartzPlugin quartzPlugin = new QuartzPlugin("job.properties");
me.add(quartzPlugin);
}
2. src目录下增加配置文件"job.properties",时间的格式请参照这里
a.job=com.dsideal.Util.JobA
a.cron=*/3 * * * * ?
a.enable=true
3. 需要引入的jar包包括 quartz-1.8.6.jar jfinal-ext-3.0.1.jar google-collect-1.0.jar,下载地址
4. JobA的代码如下,这里我加入了自己的业务逻辑,大家只需要把execute()里的方法改一下就行
package com.dsideal.Util; import java.text.SimpleDateFormat;
import java.util.Date; import org.hyperic.sigar.NetInterfaceConfig;
import org.hyperic.sigar.NetInterfaceStat;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.SigarNotImplementedException;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import com.jfinal.plugin.memcached.MemcachedKit; public class JobA implements Job {
private static long dfRxBytes = 0;
private static long dfTxBytes = 0;
public static long dfRxBytesMb = 0; //每秒接收的总字节数
public static long dfTxBytesMb = 0; //每秒发送的总字节数
static int callTime = 0; @Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
testNetIfList();
callTime++;
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " JobA works,callTime is: " + callTime);
} public void testNetIfList() {
try {
Sigar sigar = new Sigar();
String ifNames[] = sigar.getNetInterfaceList();
for (int i = 0; i < ifNames.length; i++) {
String name = ifNames[i];
if(name.equals("eth6")) {
NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(name);
// print("\nname(网络设备名) = " + name);// 网络设备名
// print("Address(IP地址) = " + ifconfig.getAddress());// IP地址
// print("Netmask(子网掩码) = " + ifconfig.getNetmask());// 子网掩码
if ((ifconfig.getFlags() & 1L) <= 0L) {
// print("!IFF_UP...skipping getNetInterfaceStat");
continue;
}
try {
NetInterfaceStat ifstat = sigar.getNetInterfaceStat(name);
// print("RxPackets(接收的总包裹数) = " + ifstat.getRxPackets());// 接收的总包裹数
// print("TxPackets(发送的总包裹数) = " + ifstat.getTxPackets());// 发送的总包裹数
if (dfRxBytes == 0) {
dfRxBytes = ifstat.getRxBytes();
}
// print("RxBytes(接收到的总字节数) = " + ifstat.getRxBytes());// 接收到的总字节数
// print("-------------------------------------------");
// print("RxBytes(每秒接收到的总字节数) = " + (ifstat.getRxBytes() - dfRxBytes) + "B");// 接收到的总字节数
// print("RxBytes(每秒接收到的总字节数) = " + ((ifstat.getRxBytes() - dfRxBytes) /1024) + "KB");// 接收到的总字节数
dfRxBytesMb = (ifstat.getRxBytes() - dfRxBytes) /1024 /1024;
// print("RxBytes(每秒接收到的总字节数) = " + dfRxBytesMb + "MB");// 接收到的总字节数
// print("-------------------------------------------");
dfRxBytes = ifstat.getRxBytes();
// print("TxBytes(发送的总字节数) = " + ifstat.getTxBytes());// 发送的总字节数
// print("-------------------------------------------");
// print("TxBytes(每秒发送的总字节数) = " + (ifstat.getTxBytes() - dfTxBytes) + "B");// 发送的总字节数
// print("TxBytes(每秒发送的总字节数) = " + ((ifstat.getTxBytes() - dfTxBytes) /1024) + "KB");// 发送的总字节数
if (dfTxBytes != 0) {
dfTxBytesMb = (ifstat.getTxBytes() - dfTxBytes) /1024 /1024 ;
MemcachedKit.set("dfTxBytesMb", 0, dfTxBytesMb);
System.out.println("dfTxBytesMb="+MemcachedKit.get("dfTxBytesMb"));
}
// print("TxBytes(每秒发送的总字节数) = " + dfTxBytesMb + "MB");// 发送的总字节数
// print("-------------------------------------------");
// if (((ifstat.getTxBytes() - dfTxBytes) /1024 /1024) <= 8) {
// this.printA();
// } else {
// this.printB();
// }
dfTxBytes = ifstat.getTxBytes();
// print("RxErrors(接收到的错误包数) = " + ifstat.getRxErrors());// 接收到的错误包数
// print("TxErrors(发送数据包时的错误数) = " + ifstat.getTxErrors());// 发送数据包时的错误数
// print("RxDropped(接收时丢弃的包数) = " + ifstat.getRxDropped());// 接收时丢弃的包数
// print("TxDropped(发送时丢弃的包数) = " + ifstat.getTxDropped());// 发送时丢弃的包数
} catch (SigarNotImplementedException e) {
print(e.getMessage());
} catch (SigarException e) {
print(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
// TODO: handle exception
} } void print(String msg) {
System.out.println(msg);
} }
jfinal-QuartzPlugin后台任务调度的更多相关文章
- Asp.Net Core 轻松学-基于微服务的后台任务调度管理器
前言 在 Asp.Net Core 中,我们常常使用 System.Threading.Timer 这个定时器去做一些需要长期在后台运行的任务,但是这个定时器在某些场合却不太灵光,而且常常无法 ...
- Jfinal QuartzPlugin 简单使用案例
之前一直使用spring quartz感觉还挺好用的,就想着jfinal是不是也可以使用quartz插件,于是发现了QuartzPlugin和jfinal-scheduler<参考:https: ...
- 在后台主机中托管SignalR服务并广播心跳包
什么是后台主机 在之前的 Asp.NETCore 轻松学系列中,曾经介绍过一个轻量级服务主机 IHostedService ,利用 IHostedService 可以轻松的实现一个系统级别的后台服务, ...
- 使用NServiceBus开发分布式应用
系列主题:基于消息的软件架构模型演变 NServiceBus 是一个.Net平台下开源的消息服务框架,这类产品有时也被称作ESB(Enterprise Service Bus)--企业服务总线.NSe ...
- JStorm之Nimbus简介
本文导读: ——JStorm之Nimbus简介 .简介 .系统框架与原理 .实现逻辑和代码剖析 )Nimbus启动 )Topology提交 )任务调度 )任务监控 .结束语 .参考文献 附:JStor ...
- NServiceBus开发
使用NServiceBus开发分布式应用 系列主题:基于消息的软件架构模型演变 NServiceBus 是一个.Net平台下开源的消息服务框架,这类产品有时也被称作ESB(Enterprise Ser ...
- Asp.NETCore轻松学系列阅读指引目录
前言 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进阶,适合没有 .NETCore 编程经验到小白同学,也适合从 .NET Framework 迁移 ...
- RabbitMQ死信队列另类用法之复合死信
前言 在业务开发过程中,我们常常需要做一些定时任务,这些任务一般用来做监控或者清理任务,比如在订单的业务场景中,用户在创建订单后一段时间内,没有完成支付,系统将自动取消该订单,并将库存返回到商品中,又 ...
- 基于.net core微服务(Consul、Ocelot、Docker、App.Metrics+InfluxDB+Grafana、Exceptionless、数据一致性、Jenkins)
1.微服务简介 一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(RESTfu ...
随机推荐
- easyui源码翻译1.32--NumberSpinner(数字微调)
前言 扩展自$.fn.spinner.defaults和$.fn.numberbox.defaults.使用$.fn.numberspinner.defaults重写默认值对象.下载该插件翻译源码 数 ...
- JavaScript功能一览
// 10) throw "太大"; if(x0) { c_start=document.cookie.indexOf(c_name + "=") if (c_ ...
- windows 下 使用codeblocks 实现C语言对python的扩展
本人比较懒就粘一下别人的配置方案了 从这开始到代码 摘自http://blog.csdn.net/yueguanghaidao/article/details/11538433 一直对Python扩展 ...
- 放在jsp头部的代码
String path = request.getContextPath(); String basePath = request.getScheme()+"://"+reques ...
- bzoj1875
我们知道,邻接矩阵自乘t次就是经过t条边的路径数但这道题显然不能这样,因为不能走回头路于是我们可以构造边的邻接矩阵矩乘即可 ; type way=record po,fr:longint; end; ...
- Micro 消息
上周,微软与计算机历史博物馆合作,发布了MS-DOS 1.1/2.0和Word for Windows 1.1a版本的源码,这是微软首次将其核心产品开源. MS-DOS MS-DOS是微软于1981年 ...
- 【转】Ubuntu安装基础教程
原文网址:http://teliute.org/linux/Ubsetup/lesson23/lesson23.html 二十三.安装Ubuntu14.04 返回目录 下一课 14.04 版安装与前面 ...
- cannot find the word template:WordToRqm.dot的解决方法
powerdesigner安装后: C:"Program Files"Sybase"PowerDesigner 12"Add-ins"Microsof ...
- 彻底解决:请求被中止: 未能创建 SSL/TLS 安全通道
最近有个项目要调用客户用java写的带https的webservice,对方提供了证书文件 test.pfx,我这里调用方式如下: //webservice代理类 SvcService svc = n ...
- SSO单点登录解决方案[转载]
1 什么是单点登陆 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互 ...