数据保存出现同一时间插入多条数据

写了一个定时器,每天0晨执行返现操作

public void execute(JobExecutionContext arg0) throws JobExecutionException {

   List<Jifenlog> log=Jifenlog.dao.find("select * from t_jifenlog where tianshu>=1");
   for (Jifenlog jifen : log) {
      //SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      //获取用户信息
      User umodel=User.dao.findFirst("select * from t_user where openid=?",jifen.getOpenid());
      try {

               if(jifen.getTianshu()>=1)
            {
               //验证当天是否已经返现
               int fxnum= Db.queryNumber(" select count(id) from t_fanxianlog  where to_days(time) = to_days(now()) and openid=?", jifen.getOpenid()).intValue();
               //添加返现记录
               if(fxnum==0)
               {

                           //问题:在当天0点满足条件进行插入时 save()同时执行了几次
                           Fanxianlog fanxianlog=new Fanxianlog();
                           fanxianlog.setFanxiannum(Double.parseDouble(jifen.getFanxiannum().toString()));
                           fanxianlog.setJifenlogid(jifen.getId());
                           fanxianlog.setOpenid(jifen.getOpenid());
                           fanxianlog.setState("已完成");
                           fanxianlog.setTime(common.getNowtime());
                           boolean b= fanxianlog.save();
                           Thread.sleep(1000);
                           if(b)
                           {
                               System.out.print("提现返现日志:用户openid:"+jifen.getOpenid());
                               logger.debug("提现返现日志:用户openid"+jifen.getOpenid()+"执行时间");
                               if(umodel!=null)
                               {
                                   umodel.setAutojifenlan(umodel.getAutojifenlan()+jifen.getFanxiannum());
                                   umodel.update();
                                   if(jifen.getTianshu()-1>=0)
                                   {
                                       jifen.setTianshu(jifen.getTianshu()-1);
                                       jifen.update();
                                   }

                               }

                           }

               }
               
            }

      } catch (Exception e) {
         System.out.println(e.getMessage());
      }
       
      
      
   }
   System.out.println("wancheng");
   
}

本人已做测试 把服务器数据库拷贝到本地,然后程序在本地跑,写入正常,服务器版就会出现代码中描述问题

数据库数据

1A01048E-715F-49EB-91BD-7DD08F7431B9.png现在也不知道哪里出得问题,路过的大神给看看是不是哪里逻辑出了问题


解决方案

<Host name="xxx"  appBase=""

            unpackWARs="false" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false">

<Context path="" docBase="D:\tomcat7\tomcat\webapps\PJZM" workDir="D:\tomcat7\tomcat\webapps\PJZM" reloadable="false"/>

<Context docBase= "D:\tomcat7\tomcat\webapps\upload"  path= "/upload"/>  </Host>

host 节点中的appBase设置为空 增加workDir="工程路径"即可

感谢大波总提示

这里分享一下


评论区

JFinal

2018-06-28 13:02

本地没问题吗? 注意 tomcat 的大坑:
https://my.oschina.net/jfinal/blog/353062

qin

2018-06-28 13:37

@JFinal 服务器上打印了下日志好像是定时器触发的时候调用了7次Job类里的函数

JFinal

2018-06-28 16:50

@qin 用什么方式调度的,是不是你的 cron 调度表达式有错误?

Jacksn2017

2018-06-28 17:05

pjzm.5dm.com亮了

qin

2018-06-29 12:03

@JFinal cron 表达式没有错误已经解决了 现在调度执行正常了

JFinal

2018-06-29 18:09

@qin 是什么原因引起的,怎么解决的? 你这个问题很奇怪,值得分享出来啊?

qin

2018-07-04 14:04

@JFinal 方案已经更新到问题中了- -!

JFinal

2018-07-04 14:50

@qin 什么原因引起的? 光知道解决方法不知道事情的原因怎么行?

qin

2018-07-06 14:13

@JFinal tomcat 配置Host 节点时候appbase=“webapps”时候 autodeploy=“true”的时候tomcat会启动webapps下的工程, 然后在Context 中的docBase=“xxx”启动,表达能力太差,就是被启动了两次

JFinal

2018-07-06 15:47

@qin 这不就是我在第一个回复里头说的你掉入了 tomcat 的坑吗?

qin

2018-07-07 14:31

热门反馈

扫码入社