public class DataSynchroMain {
public static void main(String[] args) throws IOException, ParseException {
SystemInit.init(DataSynchroMain.class);
SysMessageOutPut soutput=new SysMessageOutPut(false);
soutput.outInfo("数据同步程序已启动");
soutput.writeHeartTime();
String jsonpath=DirAndFile.combinePath(SystemInit.jarCurDir, "O_ecthin_forecast.json");
GeneralService gs=new GeneralService();
List<DateEntity> l = gs.GetJsonList(jsonpath);
List<Long> filelist=new ArrayList<Long>();
List<Long> keylist=new ArrayList<Long>();
//数据同步时判断变量
int filecount=0;
int keycount=0;
for (int i = 0; i < l.size(); i++) {
File file=new File(l.get(i).getFileath());
if(file.exists()) {
filecount++;
}
if(RedisClientHelper.existsKey(l.get(i).getKey())){
keycount++;
}
if (RedisClientHelper.existsKey(l.get(i).getKey()) & file.exists()) {
//内存库和文件数据都存在,比较修改时间
if(file.length()<=0) {
continue;
}
String dtime=RedisClientHelper.getjedis_DataTime(l.get(i).getKey());
if("".equals(dtime) || dtime==null) {
continue;
}
SimpleDateFormat fm=new SimpleDateFormat("yyyyMMddHHmmss");
Date d=fm.parse(dtime);
long keytime=d.getTime();
long filetime=file.lastModified(); //秒
filelist.add(filetime);
keylist.add(keytime);
}
}
if(filecount<=0 & keycount<=0) {
soutput.outInfo("内存库和文件都没有匹配数据,无法进行数据同步");
}else if(filecount>0 & keycount<=0) {
soutput.outInfo("内存库没有键值对,执行将文件导入内存库");
DataWriteService dws=new DataWriteService();
dws.DateWrite(jsonpath, false);
}else if(filecount<=0 & keycount>0) {
soutput.outInfo("文件不存在,执行将内存库数据导出至文件");
DataReadService drs=new DataReadService();
drs.DateRead(jsonpath, false);
soutput.outInfo("读取完成");
}else {
soutput.outInfo("内存库和文件数据匹配,通过判断修改时间来进行数据同步");
//取储存时间的俩个list的最大值相比来判断哪里的数据发生了变化
if(Collections.max(keylist)<Collections.max(filelist)) { //说明文件有数据发生了变化;导write
soutput.outInfo("文件有数据发生了变化,将文件数据导入内存库");
DataWriteService dws=new DataWriteService();
dws.DateWrite(jsonpath, false);
}else if(Collections.max(keylist)>Collections.max(filelist)){ //内存库数据变化了,导read
soutput.outInfo("内存库数据发生变化,正在将内存库数据读取至文件");
DataReadService drs=new DataReadService();
drs.DateRead(jsonpath, false);
}
}
soutput.outInfo("程序结束");
}
}
备注:1.string判断为空要严谨,”“.equals()和==null同时用;
2.collection接口提供方法,可以取list里的最大值和最小值:Collections.max(list),Collections.min(ist);
3.数据同步仅通过修改时间来判断不够严谨,还要加上数据值得判断,相同时不进行同步。