内存库与数据同步(2)

来源:互联网 发布:windows xp 激活密钥 编辑:程序博客网 时间:2024/05/20 18:20
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.数据同步仅通过修改时间来判断不够严谨,还要加上数据值得判断,相同时不进行同步。

原创粉丝点击