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 ...
随机推荐
- MySQL查询表结构的SQL小结
mysql查看表结构命令,如下: desc 表名; show columns from 表名; describe 表名; show create table 表名; 示例: use testDB; # ...
- js构造函数
使用函数做自动化 function createObj(nick, age){ var obj = { nick: nick, age: age, printName: function(){ con ...
- .htaccess文件的详解以及404页面的设置
打开记事本,写入以下代码: ErrorDocument 404 /404.html保存成.htaccess文件上传到网站的根目录. /404.html是目录名和文件名,可以改成自己的名字.QUOTE: ...
- 如何用AndroidStudio导入github项目
最近一直在研究AndroidStudio,但是总会有这样那样的问题,特别是在github上看到一个很好地开源项目,想clone下来用用,就会出现很多蛋疼的问题,今天摸索着,结合一些大牛们的建议,轻轻松 ...
- RxJava开发精要2-为什么是Observables?
原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...
- org.springframework.jdbc.datasource
org.springframework.jdbc.datasource.DataSourceUtils /** * Actually obtain a JDBC Connection from the ...
- spring cloud官方文档提到的服务开发的12项要素。
I. Codebase 从一个代码库部署到多个环境. II. Dependencies 使用显式的声明隔离依赖,即模块单独运行,并可以显式管理依赖. III. Config 在系统外部存储配置信息. ...
- make menuconfig出错
make[1]: *** [scripts/kconfig/mconf] Error 1 make: *** [menuconfig] Error 2 fixed: sudo apt-get inst ...
- WIKIOI 1222信与信封问题
题目描述 Description John先生晚上写了n封信,并相应地写了n个信封将信装好,准备寄出.但是,第二天John的儿子Small John将这n封信都拿出了信封.不幸的是,Small Joh ...
- c语言字符串库函数#include<string.h>
字符串函数<string.h> 在头文件<string.h>中定义了两组字符串函数.第一组函数的名字以str开头:第二组函数的名字以mem开头.只有函数memmove对重叠对象 ...