由于插入的数据结构比较复杂,SQL插入进行了循环批量插入。数据结构如下:
{
"projectInfo":{
projectShortName:"项目001",
projectId:"pro_001",
projectType:"xxx",
custFullName:"顺丰",
certificateNo:"4567890876543"
},
"ac":[
{
shareholderName:"顺丰集团",
shareholderType:"1",
shCertificateNo:"xxx749239049",
stockPercent:"10%"
},
{
shareholderName:"顺丰",
shareholderType:"1",
shCertificateNo:"xxx749239049",
stockPercent:"5%"
}
],
"dse":[
{
shareholderName:"张三",
shareholderType:"0",
shCertificateNo:"56899749239049",
stockPercent:"2%"
},
{
shareholderName:"赵四",
shareholderType:"0",
shCertificateNo:"56899749231344",
stockPercent:"2%"
}
],
"ctp":[
{
shareholderName:"王麻子",
shareholderType:"0",
shCertificateNo:"56899749231344",
stockPercent:"1%"
}
]
}
插入数据时报数据库插入出现死锁,如下:
这时候考虑到代码中是否采用了多线程,如果是单条数据循环插入是不会出现争抢锁资源的情况,最后发现代码中使用了parallelStream()方法,parallelStream()是一种并行流多线程的操作,将它改成stream()方法就解决问题了!
参考:
Stream和parallelStream