日期:2014-05-18  浏览次数:20739 次

关于在多线程中使用Spring的事务管理:
关于Spring的事务管理:
在线程类中添加Spring的事务管理,好像不管用。
下面这段代码运行后,有可能抛出异常:“在表中插入重复键值”。
我怀疑是UpdateData这个方法并没有作为一个事务运行导致的。
大家帮我看看是怎么回事儿?



public class DataSyncServiceImpl implements DataSyncService {
    private myDao dao;
private static Object lock = new Object();

@Override
public void RelayDataSync() {
List<Thread> threads = new ArrayList<Thread>();
try{
synchronized(lock){
     for(int i=0;i<){     
     myThread thread = new myThread(dao);     
     thread.start();     
     }
}
}catch(Exception exp){
exp.printStackTrace();
}
}
}

@Service
public class myThread extends Thread{
private myDao dao;
public myThread(){
}
public myThread(myDao  dao){
this.myDao =dao;
}

    public void run(){
     Connection conn = null;    
     try{         
     conn = getConnection();    
     List<Receipt> datas = getDataFromOtherDatabase(conn);
     UpdateData(datas);              
        }catch(Exception e){ 
e.printStackTrace();
        }
     finally{
     XXX
     }
    }
    
    @Transactional  
    private void UpdateData(List<Receipt> datas){
     try{    
this.myDao.DeleteData(XXX);
for(Data data : datas){
this.myDao.InsertData(data);
}
     }catch(Exception e){
     e.printStackTrace();
     }    
    }

}

------解决方案--------------------
锁的位置是不是  不太合适?
另外 主键 生成策略 修改为 IDENTITY试试
------解决方案--------------------
是不是有人在黑 CSDN 三楼这种情况最近一直出现啊