由于每次上传execl数据十万条,一次批量太慢 用的是线程池+batchSave,但是事物失效,怎么办
@Before(Tx.class) public void test1(List<TaxPayExcel> resultList){ long begin=System.currentTimeMillis(); ExecutorService executorService = Executors.newCachedThreadPool(); for(int j=0;j<10;j++){ int finalJ = j; executorService.execute(()->{ List<TaxPayExcel> tempList=new ArrayList<>(); for(int i = finalJ *3000; i<(finalJ+1)*3000; i++){ tempList.add(resultList.get(i)); } Db.batchSave(tempList,tempList.size()); }); } executorService.shutdown(); try { executorService.awaitTermination(1, TimeUnit.DAYS); } catch (InterruptedException e) { e.printStackTrace(); } long end=System.currentTimeMillis(); System.out.println(end-begin); throw new RuntimeException(""); }
项目:JFinal
不过可以扩展一下。推荐使用 Db.tx(xx)控制更精细些。
就是每个线程里面都使用 Db.tx(xx),然后在 return 之前把结果(true或false)放入 外层的
“总结果集”中,并等待所有的线程执行完毕后,看 总结果集 里面有false值没, 有的话, 就 return false;这样就全部失败, 或全部成功。