问题描述
java工程中做定时任务使用truncate清理表数据时,启动服务第一次执行定时任务时清理成功,第二次清理时语句执行了未清理掉未有异常,换成delete则可正常我测了job频率为5分钟、10分钟、两小时的情况结果都一样,监控oracle数据库第一次执行定时任务时oracle执行了truncate语句,第二次及之后运行程序oracle未执行truncate语句,工程框架spring+ibatis+struts2何解请高手给点建议?
解决方案
解决方案二:
没人顶沙发求二楼
解决方案三:
为嘛??????????????????????????
解决方案四:
有人知道么~~~???????????
解决方案五:
我也这个问题怎么解决的啊~~~~~~~~~~~~??????????????
解决方案六:
楼主ibatis是不是设置了缓存啊,同一语句同一查询条件的sql如果有用缓存的话,就有可能出现这个问题
解决方案七:
好像不是的这个还分电脑我的是xp系统可以别人用的win7系统反而不可以
解决方案八:
会不会是因为有脏数据的问题。我之前遇到过一次,就是因为有脏数据,导致truncate执行不成功,非得用delete。
解决方案九:
truncate是肯定可以执行的我现在在做一个job执行每次通过定时任务执行数据抽取,先必须把表清空然后在去抽取数据。发现每次第一次执行job会成功清空表(truncate...),但是第二次、第三次就会有问题。问题就是无法truncate之前的表。。。而且这个问题分不同的主机,碧如xp系统下可以到了win7系统就不可以~~~比较崩溃!!@
解决方案十:
<!--执行删除truncate数据--><statementid="deleteSqlByIbaits"parameterClass="java.util.Map"remapResults="true"><![CDATA[$executeSql$]]></statement>
@OverridepublicintclearSqlByIbaits(StringlatnId,Map<String,String>map)throwsSQLException{if(logger.isDebugEnabled()){logger.debug("entermethod:"+this.getClass().getName()+".clearSqlByIbaits(StringlatnId,Map<String,String>map)");}//StringexecuteSql=map.get("executeSql");//操作sqlIntegerdataNum=newInteger(0);try{//if(executeSql!=null){////查找数据+得到需要truncate的表名//executeSql=executeSql.toUpperCase();//executeSql="selectcount(1)from"//+executeSql.substring(executeSql.toUpperCase().indexOf("TABLE")).replace("TABLE","").trim().toUpperCase();//map.put("sql",executeSql);//设置executeSql//dataNum=(Integer)commonDAO.queryForObject(latnId,NAME_SPACE+".getCountAllByTableName",map);//}commonDAO.delete(latnId,NAME_SPACE+".deleteSqlByIbaits",map);}catch(SQLExceptione){logger.error("geterrorin"+this.getClass().getName()+".clearSqlByIbaits(StringlatnId,Map<String,String>map)",e);throwe;}if(logger.isDebugEnabled()){logger.debug("exitmethod:"+this.getClass().getName()+".clearSqlByIbaits(StringlatnId,Map<String,String>map)");}returndataNum;}
解决方案十一:
这里是job和配置packagecom.tydic.dep.audit2.onepointfee.job;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.apache.log4j.Logger;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importcom.tydic.dep.audit.band.job.ExtractBandAllJob;importcom.tydic.dep.audit.common.config.LoadUpIVPNFeeConfig;importcom.tydic.dep.audit.dataExtract.bo.DataExtractBo;importcom.tydic.dep.audit.job.initJob.AbstractStatefulJob;importcom.tydic.dep.audit.joblog.bo.JobLogBO;importcom.tydic.dep.common.config.CommonConfig;importcom.tydic.dep.common.log.LoggerFactory;importcom.tydic.dep.common.util.AudiDateUtil;importcom.tydic.dep.common.util.SpringContextUtils;/***@作者duzm*@创建日期Jul21,2014*@版本V1.0*/publicclassOnePointFeeCrmExtractJobextendsAbstractStatefulJob{//日志工具类privatestaticLoggerlogger=LoggerFactory.getLogger(ExtractBandAllJob.class);@OverridepublicvoidexecuteJob(JobExecutionContextjobExecutionContext)throwsJobExecutionException{if(logger.isDebugEnabled()){logger.debug("enterinmethod:"+this.getClass().getName()+".executeJob(JobExecutionContextjobExecutionContext)throwsJobExecutionException");}//记录心跳日志try{JobLogBOjobLogBO=(JobLogBO)SpringContextUtils.getBean("jobLogBO");jobLogBO.handlerJobLog(this.getClass().getName(),null);}catch(Exceptione){logger.error("写入job心跳日志表异常,geterrorin"+this.getClass().getName()+".executeJob(JobExecutionContextjobExecutionContext).",e);}logger.info("一点收费生产数据抽取开始!");//SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmss");//StringstartTime=sdf.format(newDate());//System.out.println("开始时间:"+startTime);StringaudiDate=null;StringaudateExpression=null;IntegeraudiDay=1;;//默认时间//获取稽核时间表达式try{CommonConfigconfig=LoadUpIVPNFeeConfig.getInstance().getConfig();audateExpression=config.getStringValue("auditExp","");logger.info("一点收费全量稽核,稽核时间:"+audateExpression);}catch(Exceptione){logger.error("geterrorin"+this.getClass().getName()+".getAudiDate()throwsException",e);}try{DataExtractBodataExtractBo=(DataExtractBo)SpringContextUtils.getBean("dataExtractBo");AudiDateUtilaudiDateUtil=newAudiDateUtil();//获取稽核时间的类audiDate=audiDateUtil.getAudiDate(audiDay,audateExpression);//调用方法获取稽核时间dataExtractBo.extractData("OnePointFeeCrmExtractJob",audiDate);//调用数据抽取配置实现中实现的公共方法}catch(Exceptione){logger.error("geterrorin"+this.getClass().getName()+".executeJob(JobExecutionContextjobExecutionContext)throwsJobExecutionException",e);}//StringendTime=sdf.format(newDate());//System.out.println("结束时间:"+endTime);//try{//longl=sdf.parse(startTime).getTime()-sdf.parse(endTime).getTime();//System.out.println("时间差:"+l/1000);//}catch(ParseExceptione){////TODOAuto-generatedcatchblock//e.printStackTrace();//}logger.info("一点收费生产数据抽取完成!");if(logger.isDebugEnabled()){logger.debug("exitinmethod:"+this.getClass().getName()+".executeJob(JobExecutionContextjobExecutionContext)throwsJobExecutionException");}}}
<ConfigItem><Name>jobName</Name><Description>不分本地网的Job</Description><Value>com.tydic.dep.audit2.onepointfee.job.OnePointFeeCrmExtractJob</Value></ConfigItem><ConfigItem><Name>com.tydic.dep.audit2.onepointfee.job.OnePointFeeCrmExtractJob.sendTime</Name><Description>GC国际漫游上传数据抽取Job执行时间</Description><Value>00/1***?</Value></ConfigItem><ConfigItem><Name>com.tydic.dep.audit2.onepointfee.job.OnePointFeeCrmExtractJob.dealNum</Name><Description>GC国际漫游上传数据抽取Job执行处理条数</Description><Value>100</Value></ConfigItem>