关于在多线程中使用Spring的事务管理:该怎么处理
关于在多线程中使用Spring的事务管理:
关于Spring的事务管理:
在线程类中添加Spring的事务管理,好像不管用。
下面这段代码运行后,有可能抛出异常:“在表中插入重复键值”。
我怀疑是UpdateData这个方法并没有作为一个事务运行导致的。
大家帮我看看是怎么回事儿?
------解决方案--------------------
锁的位置是不是 不太合适?
另外 主键 生成策略 修改为 IDENTITY试试
------解决方案--------------------
是不是有人在黑 CSDN 三楼这种情况最近一直出现啊
关于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 三楼这种情况最近一直出现啊