📄 messagemonitor.java
字号:
package msg;
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;
import java.sql.*;
import msg.*;
public class MessageMonitor implements Runnable{
private static long monitorInterval = 5 * 60 * 1000;
FileWriter logFW=null;
PrintWriter logPW=null;
private boolean threadsOn=false;
private String fileName="messageMonitor.properties";
String logFileName ="";
File logFile=null;
boolean viewPageDeleted=false;
boolean messageDeleted=false;
boolean resetSiteCredited=false;
public MessageMonitor(){
if(threadsOn==false){
init();
Thread th=new Thread(this);
th.start();
threadsOn=true;
}
}
public void run(){
while (threadsOn){
try{
deleteMessage();
deleteWebstat();
resetSiteCredit();
Thread.sleep(monitorInterval); //
}catch (InterruptedException e1) {}
catch (Exception e) {
try{log("Error:"+e.getMessage());}catch(Exception ee){}
}
}
}
//每天3点删除短信息表中的30天前的数据
private void deleteMessage(){
String sql="";
DbConn db=null;
try{
Calendar now= Calendar.getInstance();
if(now.get(Calendar.HOUR_OF_DAY) != 3 && messageDeleted==true)
messageDeleted=false;
if(now.get(Calendar.HOUR_OF_DAY) != 3 || messageDeleted==true)
return;
now.setTimeInMillis(now.getTimeInMillis()-(31l * 24l * 60l * 60l * 1000l)); //后退31天
String nowStr=String.valueOf(now.get(Calendar.YEAR))+"-"+String.valueOf(now.get(Calendar.MONTH)+1)+"-"+
String.valueOf(now.get(Calendar.DAY_OF_MONTH))+" "+String.valueOf(now.get(Calendar.HOUR_OF_DAY))+":"+
String.valueOf(now.get(Calendar.MINUTE))+":"+String.valueOf(now.get(Calendar.SECOND));
db = new DbConn();
sql="delete from message where ( type<>\'TALKMSG\' and type<>\'GKMSG\' and isRead<>\'0\') or sendTime<\'"+nowStr+"\'";
if(db.getConnection()==null || db.isClosed())
db.setConnection();
db.setSqlQuery(sql);
int rows=db.executeUpdate();
if(db.getConnection()!=null && !db.isClosed())
db.closeConnection();
messageDeleted=true;
if(rows>0)
log("从表message删除记录"+rows+"条");
}catch(Exception e){
try{
if(db!=null && db.getConnection()!=null && !db.isClosed())
db.closeConnection();
}catch(Exception e1){}
log("class:MessageMonitor method:deleteMessage() error:"+e.getMessage()+" sql:"+sql);
}
}
//每天3点删除统计表中的30天前的数据
private void deleteWebstat(){
String sql="";
DbConn db=null;
try{
Calendar now= Calendar.getInstance();
if(now.get(Calendar.HOUR_OF_DAY) != 3 && viewPageDeleted==true)
viewPageDeleted=false;
if(now.get(Calendar.HOUR_OF_DAY) != 3 || viewPageDeleted==true)
return;
now.setTimeInMillis(now.getTimeInMillis()-(31l * 24l * 60l * 60l * 1000l)); //后退31天
String nowStr=String.valueOf(now.get(Calendar.YEAR))+"-"+String.valueOf(now.get(Calendar.MONTH)+1)+"-"+
String.valueOf(now.get(Calendar.DAY_OF_MONTH))+" "+String.valueOf(now.get(Calendar.HOUR_OF_DAY))+":"+
String.valueOf(now.get(Calendar.MINUTE))+":"+String.valueOf(now.get(Calendar.SECOND));
db = new DbConn();
sql="delete from pageview where time<\'"+nowStr+"\'";
if(db.getConnection()==null || db.isClosed())
db.setConnection();
db.setSqlQuery(sql);
int rows=db.executeUpdate();
if(db.getConnection()!=null && !db.isClosed())
db.closeConnection();
viewPageDeleted=true;
if(rows>0)
log("从表pageView删除统计记录"+rows+"条");
}catch(Exception e){
try{
if(db!=null && db.getConnection()!=null && !db.isClosed())
db.closeConnection();
}catch(Exception e1){}
log("class:MessageMonitor method:deleteWebstat() error:"+e.getMessage()+" sql:"+sql);
}
}
//每月1日3点初始化注册站点(不包括添加站点)的月短信息信用点
private void resetSiteCredit(){
String sql="";
DbConn db=null;
try{
Calendar now= Calendar.getInstance();
if( (now.get(Calendar.DAY_OF_MONTH)!=1 || now.get(Calendar.HOUR_OF_DAY) != 3 )
&& resetSiteCredited==true)
viewPageDeleted=false;
if(now.get(Calendar.DAY_OF_MONTH)!=1 || now.get(Calendar.HOUR_OF_DAY) != 3 || resetSiteCredited==true)
return;
db = new DbConn();
sql="update site set credit=\'100\' where parentId=\'0\' and payLevel=\'0\'";
if(db.getConnection()==null || db.isClosed())
db.setConnection();
db.setSqlQuery(sql);
int rows=db.executeUpdate();
if(db.getConnection()!=null && !db.isClosed())
db.closeConnection();
resetSiteCredited=true;
if(rows>0)
log("在表site中初始化本月短信息信用点的网站共"+rows+"个");
}catch(Exception e){
try{
if(db!=null && db.getConnection()!=null && !db.isClosed())
db.closeConnection();
}catch(Exception e1){}
log("class:MessageMonitor method:resetSiteCredit() error:"+e.getMessage()+" sql:"+sql);
}
}
/**
* 读取属性完成初始化
*/
private void init() {
InputStream is = getClass().getResourceAsStream(fileName);
Properties props = new Properties();
try {
props.load(is);
}
catch (Exception e) {
System.err.println("不能读取属性文件. " +"请确保siteMonitor.properties在CLASSPATH指定的路径中");
return;
}
//logFileName = props.getProperty("logfile")+"messageMonitor.txt";
String path=(((this.getClass()).getResource("")).getPath()).toString();
//path 形如:/D:/100imserver/Tomcat5.5/webapps/ROOT/WEB-INF/classes/msg/
path=path.substring(0,path.indexOf("WEB-INF"));
logFileName=path+"logs/"+props.getProperty("logfile");
}
/**
* 将文本信息写入日志文件
*/
private void log(String s) {
// log.println(new java.util.Date() + ": " + msg);
try{
//如果文件大于5M,就把原log文件名+1,然后另立文件
File logFile=new File(logFileName);
if(logFile!=null && logFile.exists() && logFile.length() > 5*1024*1024 ) { //如果文件大于5M
String filePre=logFileName.substring(0,logFileName.indexOf("."));
File f1;
for(int i=1;i>0;i++){
f1=new File(filePre+String.valueOf(i)+".txt");
if(f1.exists())
continue;
else{
logFile.renameTo(new File(filePre+String.valueOf(i)+".txt"));
logFile=new File(logFileName);
logFW = new FileWriter(logFileName,true); //false 覆盖原有文件
logPW = new PrintWriter(logFW);
break;
}
}
}
if(logPW == null){
logFile=new File(logFileName);
logFW = new FileWriter(logFileName,true); //false 覆盖原有文件
logPW = new PrintWriter(logFW);
}
logPW.print(new java.util.Date()+" "+s);
logPW.print("\r\n");
logPW.flush();
}catch(Exception e){System.out.println("writeLog:"+e);}
}
/**
* 将文本信息与异常写入日志文件
*/
private void log(Throwable e, String msg) {
//log.println(new java.util.Date() + ": " + msg);
//e.printStackTrace(log);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -