【发布时间】:2014-02-17 13:07:37
【问题描述】:
下面的 jdbcTemplate 更新脚本是线程安全的吗?它的作用基本上是:
balance -= amount;
代码如下:
String sql = "update player.playerbalance b set b.balance = (b.balance - ?) where b.id = ? and b.balance >= ?";
jdbcTemplate = new JdbcTemplate(dataSource);
int i = jdbcTemplate.update(
sql,
new Object[] {wager, playerBalance.getId(), wager});
如果同时发生两次此类更新会怎样?
谢谢,
【问题讨论】:
-
你会得到一个例外:
javax.persistence.OptimisticLockExceptionorOptimisticLockingFailureExceptionor other.. -
但我没有明确定义锁定..
-
@Jaiwo99 我怀疑你是否会得到这样的异常,因为这里没有乐观并发检查
-
我认为这在很大程度上取决于您使用的数据库和隔离级别,您用于 sql 连接
-
@AdrianShum 你是对的,这取决于数据库锁定策略..
标签: spring jdbc jdbctemplate