package foundation.data.meta;
|
|
import java.util.Date;
|
|
import foundation.persist.NamedSQL;
|
import foundation.persist.SQLRunner;
|
import foundation.persist.source.NamedDataSource;
|
import foundation.server.config.ServerStatus;
|
import foundation.util.Util;
|
|
public class MetaMonitor {
|
|
private NamedDataSource dataSource;
|
private String dataName;
|
private NamedSQL getLastUpdateTimeSQL;
|
private Date lastUpdateTime;
|
private int count;
|
|
public MetaMonitor(String sqlName) {
|
this(NamedDataSource.getInstance(), null, sqlName);
|
count = 0;
|
}
|
|
public MetaMonitor(String dataName, String sqlName) {
|
this(NamedDataSource.getInstance(), dataName, sqlName);
|
}
|
|
public MetaMonitor(NamedDataSource dataSource, String dataName, String sqlName) {
|
this.dataSource = dataSource;
|
this.dataName = dataName;
|
|
try {
|
getLastUpdateTimeSQL = NamedSQL.getInstance(dataSource.getDBaseType(), sqlName);
|
getLastUpdateTimeSQL.setParam("dataName", dataName);
|
|
lastUpdateTime = new Date();
|
lastUpdateTime.setTime(0);
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public MetaMonitor(NamedDataSource dataSource, String sqlName) {
|
this.dataSource = dataSource;
|
|
try {
|
getLastUpdateTimeSQL = NamedSQL.getInstance(dataSource.getDBaseType(), sqlName);
|
|
lastUpdateTime = new Date();
|
lastUpdateTime.setTime(0);
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public ReloadCheckResult getReloadCheckResult() throws Exception {
|
ReloadCheckResult result = new ReloadCheckResult(false, lastUpdateTime);
|
|
//1. 如果系统全局设置为不检查,直接退出
|
if ((!ServerStatus.isCheckMetaUpdateOnTime()) && count > 1) {
|
return result;
|
}
|
|
//2. 检查是否数据库是否有更新
|
Date date = SQLRunner.getDate(dataSource, getLastUpdateTimeSQL);
|
|
if (date == null) {
|
return result;
|
}
|
|
boolean changed = (date != null) ? (lastUpdateTime.getTime() < date.getTime()) : true;
|
result.setNeedReload(changed);
|
result.setLastUpdateTime(date);
|
|
count = count + 1;
|
return result;
|
}
|
|
public ReloadCheckResult getReloadCheckResult(boolean checkMetaUpdate) throws Exception {
|
ReloadCheckResult result = new ReloadCheckResult(false, lastUpdateTime);
|
|
Date date = SQLRunner.getDate(dataSource, getLastUpdateTimeSQL);
|
|
if (date == null) {
|
return result;
|
}
|
|
boolean changed = (date != null) ? (lastUpdateTime.getTime() < date.getTime()) : true;
|
result.setNeedReload(changed);
|
result.setLastUpdateTime(date);
|
|
count = count + 1;
|
return result;
|
}
|
|
public Date getLastUpdateTime() {
|
return lastUpdateTime;
|
}
|
|
public void setLastUpdateTime(Date lastUpdateTime) {
|
if (lastUpdateTime == null) {
|
return;
|
}
|
|
this.lastUpdateTime = lastUpdateTime;
|
}
|
|
public void setParam(String name, String value) {
|
getLastUpdateTimeSQL.setParam(name, value);
|
};
|
|
public void setRefreshFlag() {
|
lastUpdateTime.setTime(0);
|
}
|
|
@Override
|
public String toString() {
|
String result = dataName + Util.DataTimeToString(lastUpdateTime);
|
return result;
|
}
|
|
}
|