一个java定时任务,定时任务设定:服务启动后,每隔1分钟执行一次查询,对应mapper.xml中的查询语句如下:<select id="searchIncreInfo" resultType="cn.freeteam.cms.model.Info">
SELECT i.id, i.site, s.sourcePath sitepath, s.name sitename, i.channel, c.name channelname, c.indexnum channelIndexnum, i.title, i.url, i.addtime, i.htmlIndexnum
FROM freecms_info i
LEFT JOIN freecms_site s ON i.site = s.id
LEFT JOIN freecms_channel c ON i.channel = c.id
WHERE i.catchFlag IS NULL OR i.catchFlag != '1'
ORDER BY i.htmlIndexnum
</select>系统日志如下:-----------createIndexIncre start-----------
~~~~~~~~~~~~~~~~~~~~~9
-----------createIndexIncre end-----------
-----------createIndexIncre start-----------
~~~~~~~~~~~~~~~~~~~~~0
-----------createIndexIncre end-----------
-----------createIndexIncre start-----------
~~~~~~~~~~~~~~~~~~~~~0
-----------createIndexIncre end-----------
-----------createIndexIncre start-----------
~~~~~~~~~~~~~~~~~~~~~0
-----------createIndexIncre end-----------感觉莫名其妙的,“~~~~~~~~~~~~~~~~~~~~~9”和“~~~~~~~~~~~~~~~~~~~~~0”是打印的查询到的记录数,第一次查询到9条记录,之后一直是0条数据,不晓得是不是和mybatis某些缓存机制相关(但是,这里仅仅做的是查询而已)?
为什么第一次可以查到数据,之后执行就不行了呢?用的mysql数据库,请高人指点,谢谢!

解决方案 »

  1.   

    补充说明:
    经过后续调查,是这样的,服务器启动后,定时任务查询到数据之后,会更新这些记录:set catchFlag = '1';
    接着又做了如下验证:
    通过数据库管理工具,手动将数据表中部分记录的catchFlag更新为‘0’或者其他值,拷贝mapper.xml中的查询语句,在管理工具中执行,可以查到上述手动更改的记录,但是服务器控制台显示,定时任务查不到手动修改过catchFlag的数据,一旦重启服务器,定时任务第一次执行时,又可以查到修改过的记录。也就是说,启动服务后,第一次执行查询,可以查到记录,接着对数据记录做更新,之后,再手动修改某几条记录的flag,定时任务本该查到的,却没有查到,直到下次服务器重启,才能查到手动修改的记录。以上的情况该做如何解释呢?