现在的位置: 首页 > 综合 > 正文

spring 操作 oracle 行级锁

2014年08月29日 ⁄ 综合 ⁄ 共 984字 ⁄ 字号 评论关闭

在使用sping 数据库使用oracle 时,想要更新某一条记录时,其他的线程不可操作此条记录,可以使用select * from tableName where id=? for update; 这样就可以把这条符合条件的记录上锁,行级锁。什么时候解锁呢,这个需要 手动提交事务后 就解锁了。spring 提供了手动提交事务的操作。

	import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
       @Autowired
	TransactionTemplate transactionTemplate;
transactionTemplate.execute(new TransactionCallback() {
					@Override
					public Object doInTransaction(TransactionStatus status) {
						try {
							FbiInfluxTransaction lock = influxTransactionService.selectFbiInfluxTransactionForUpdate(updateTransaction.getSettleSequenceNo(), "0");
							if (lock != null) {
								FbiInfluxTransaction fbiInfluxTransaction = new FbiInfluxTransaction();
						 
							}
						} catch (Exception e) {
							LogUtil.error(LOGGER,e,"ErrorCode:{0},Error:{1},SettleSequenceNo:{2}" ,ErrorCode.FNFIBIZ012.getCode(), ErrorCode.FNFIBIZ012.getMsg() , bankReturnInforBO.getSettleSequenceNo());
							status.setRollbackOnly();
							throw new RuntimeException(e);

						}
						return null;
					}
				});

抱歉!评论已关闭.