如何保证在一定的时间间隔内更新到数据库

amrnrhlw  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(290)

我在一个springjava8应用程序中工作,我有一个异步生成标签(pdf生成)的函数。它包含一个循环,通常它会运行1000多个,它会生成1000多个pdf标签。在每个循环结束后,我们需要更新数据库,以便我们只保存状态,即最初它保存numberofgeneratedcount=0,在每个标签之后,我们只增加变量并更新表。不需要在每个循环结束时将这个递增的计数保存到db,我们需要的是在固定的时间间隔内更新数据库,以减少数据库插入的负载。目前我的代码是

// Label is a database model class labeldb is variable of that 
//commonDao.saveLabelToDb function to save Label object

int numberOfgeneratedCount =0;
labeldb.setProcessedOrderCount(numberOfgeneratedCount);
commonDao.saveLabelToDb(labeldb);

for(Order order: orders){
  generated = true;
  try{
        // pdf generation code
     }catch Exception e{
        // catch block here
        generated = false;
     }

     if(generated){
          numberOfgeneratedCount++;
          deliveryLabeldb.setProcessedOrderCount(numberOfgeneratedCount);
          commonDao.saveLabelToDb(labeldb );
     }
}

为了提高性能,我们只需要每隔10秒更新一次数据库。任何帮助都将不胜感激

snz8szmq

snz8szmq1#

我用下面的代码做了这个,我不确定这是不是一个好的解决方案,有人请改进使用一些内置函数

int numberOfgeneratedCount =0;
labeldb.setProcessedOrderCount(numberOfgeneratedCount);
commonDao.saveLabelToDb(labeldb);
int nowSecs =LocalTime.now().toSecondOfDay();
int lastSecs = nowSecs;

for(Order order: orders){
  nowSecs = LocalTime.now().toSecondOfDay();
  generated = true;
  try{
        // pdf generation code
     }catch Exception e{
        // catch block here
        generated = false;
     }

     if(generated){
          numberOfgeneratedCount++;
          deliveryLabeldb.setProcessedOrderCount(numberOfgeneratedCount);
          if(nowSecs-lastSecs > 10){
                lastSecs=nowSecs;
                commonDao.saveLabelToDb(labeldb );
             }

     }
}

相关问题