请教一个关于Spring的事务的问题。
请教一个关于Spring的事务的问题。
下面这段代码放到多线程里,为什么会出现“主键重复”异常?
也就是这段代码并没有作为一段原子代码块运行。
@Transactional
private void UpdateServerDiskData(List<Data> datas){
try
{
this.serverDiskDao.DeleteAllData();
for(Data data : datas ){
this.dao.InsertData(data);
}
}catch(Exception e){
e.printStackTrace();
}
}
用下面这样同步就没问题:
@Transactional
private void UpdateServerDiskData(List<Data> datas){
try
{
synchronized(lockObj){
this.serverDiskDao.DeleteAllData();
for(Data data : datas ){
this.dao.InsertData(data);
}
}
}catch(Exception e){
e.printStackTrace();
}
}
------解决方案--------------------@Transactional 只针对 public方法起作用
------解决方案--------------------2楼正解,你的事物注解没起作用,你改成public去掉同步关键字就不会出现了
------解决方案--------------------
不一定吧, 它这里的@Transactional 不起作用,不代表这个方法没有事务,它如果运行在其它事务方法中也一样可以保存数据。
所以不太清楚楼主是什么问题
------解决方案--------------------
恩,的确,疏忽了,只是@transaction没气作用