「java如何监控数据变动」java监控对象变化
今天给各位分享java如何监控数据变动的知识,其中也会对java监控对象变化进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、Java 如何监控文件目录的变化
- 2、java怎样监听一个值是否发生了变化,具体代码
- 3、java求高手,怎样随时监测数据库中数据的增删改查?
- 4、java后台怎样监控sql server数据库数据的变化
- 5、JAVA实现业务数据监控解决方案
- 6、如何用java监听 数据库某张表的变化
Java 如何监控文件目录的变化
JavaSE 1.7提供了相关的API,去监视文件或者文件夹的变动,主要的API都在java.nio.file下面,其大概流程如下:
package org.xdemo.superutil.j2se.filewatch;
import static java.nio.file.LinkOption.NOFOLLOW_LINKS;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchEvent.Kind;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.HashMap;
import java.util.Map;
/**
* 文件夹监控
*
* @author Goofy a href="";/a
* @Date 2015年7月3日 上午9:21:33
*/
public class WatchDir {
private final WatchService watcher;
private final MapWatchKey, Path keys;
private final boolean subDir;
/**
* 构造方法
*
* @param file
* 文件目录,不可以是文件
* @param subDir
* @throws Exception
*/
public WatchDir(File file, boolean subDir, FileActionCallback callback) throws Exception {
if (!file.isDirectory())
throw new Exception(file.getAbsolutePath() + "is not a directory!");
this.watcher = FileSystems.getDefault().newWatchService();
this.keys = new HashMapWatchKey, Path();
this.subDir = subDir;
Path dir = Paths.get(file.getAbsolutePath());
if (subDir) {
registerAll(dir);
} else {
register(dir);
}
processEvents(callback);
}
@SuppressWarnings("unchecked")
static T WatchEventT cast(WatchEvent? event) {
return (WatchEventT) event;
}
/**
* 观察指定的目录
*
* @param dir
* @throws IOException
*/
private void register(Path dir) throws IOException {
WatchKey key = dir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
keys.put(key, dir);
}
/**
* 观察指定的目录,并且包括子目录
*/
private void registerAll(final Path start) throws IOException {
Files.walkFileTree(start, new SimpleFileVisitorPath() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
register(dir);
return FileVisitResult.CONTINUE;
}
});
}
/**
* 发生文件变化的回调函数
*/
@SuppressWarnings("rawtypes")
void processEvents(FileActionCallback callback) {
for (;;) {
WatchKey key;
try {
key = watcher.take();
} catch (InterruptedException x) {
return;
}
Path dir = keys.get(key);
if (dir == null) {
System.err.println("操作未识别");
continue;
}
for (WatchEvent? event : key.pollEvents()) {
Kind kind = event.kind();
// 事件可能丢失或遗弃
if (kind == StandardWatchEventKinds.OVERFLOW) {
continue;
}
// 目录内的变化可能是文件或者目录
WatchEventPath ev = cast(event);
Path name = ev.context();
Path child = dir.resolve(name);
File file = child.toFile();
if (kind.name().equals(FileAction.DELETE.getValue())) {
callback.delete(file);
} else if (kind.name().equals(FileAction.CREATE.getValue())) {
callback.create(file);
} else if (kind.name().equals(FileAction.MODIFY.getValue())) {
callback.modify(file);
} else {
continue;
}
// if directory is created, and watching recursively, then
// register it and its sub-directories
if (subDir (kind == StandardWatchEventKinds.ENTRY_CREATE)) {
try {
if (Files.isDirectory(child, NOFOLLOW_LINKS)) {
registerAll(child);
}
} catch (IOException x) {
// ignore to keep sample readbale
}
}
}
boolean valid = key.reset();
if (!valid) {
// 移除不可访问的目录
// 因为有可能目录被移除,就会无法访问
keys.remove(key);
// 如果待监控的目录都不存在了,就中断执行
if (keys.isEmpty()) {
break;
}
}
}
}
}
java怎样监听一个值是否发生了变化,具体代码
java 自定义监听器监听属性变化
import java.util.EventObject;
public class MyEvent extends EventObject
{
private Object obj;
private String sName;
public MyEvent(Object source,String sName)
{
super(source);
this.obj=source;
this.sName=sName;
}
public Object getObj()
{
return obj;
}
public String getsName()
{
return sName;
}
}
import java.util.EventListener;
public interface MyEventListener extends EventListener
{
public void handleEvent (MyEvent me);
}
import java.util.Iterator;
import java.util.Vector;
import demo.DemoEvent;
public class MyEventSource
{
private Vector list=new Vector();
private String sName = "";
public MyEventSource()
{
super();
}
public void addMyEventListener(MyEventListener me)
{
list.add(me);
}
public void deleteMyEventListener(MyEventListener me)
{
list.remove(me);
}
public void notifyMyEvent(MyEvent me)
{
Iterator it=list.iterator();
while(it.hasNext())
{
((MyEventListener) it.next()).handleEvent(me);
}
}
public void setName(String str)
{
boolean bool = false;
if (str == null sName != null)
bool = true;
else if (str != null sName == null)
bool = true;
else if (!sName.equals(str))
bool = true;
this.sName = str;
// 如果改变则执行事件
if (bool)
notifyMyEvent(new MyEvent(this, sName));
}
public String getsName()
{
return sName;
}
}
public class Test implements MyEventListener
{
public Test()
{
MyEventSource mes = new MyEventSource();
mes.addMyEventListener(this);
mes.setName("niu");
}
public static void main(String args[])
{
new Test();
}
public void handleEvent(MyEvent me)
{
System.out.println(me.getSource());
System.out.println(me.getsName());
}
}
java求高手,怎样随时监测数据库中数据的增删改查?
这个要看你监控的切面在那里
想项目系统中监控,那里你就要监控所有的增删改查方法
要么你使用动态代理,要么你使用spring的AOP
想在数据库中监控,可以考虑触发器
mysql也有触发器,可以考虑下
java后台怎样监控sql server数据库数据的变化
看来你是做日志记录,在SQL server 2005中建立一个触发器(delete,update\insert),针对table1,在触发器的代码中加上数据拷贝的SQL语句就可以了。
JAVA实现业务数据监控解决方案
用mysql就可以吧,以每五分钟统计一次来看:每年的记录数60/5*24*365=105120条,10年才100w,再在开始时间、结束时间字段建个联合索引,不用担心数据库性能。
如何用java监听 数据库某张表的变化
ajax 轮训,HTML5 websocket 触发器是在数据库端的,实现不了你的要求。
ajax轮训每隔几秒就查询一次,保存上次的总条数,然后下次只要不一样了就弹窗。
你这个对服务器压力很大(如果用户很多的话)
java如何监控数据变动的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java监控对象变化、java如何监控数据变动的信息别忘了在本站进行查找喔。