2014-02-17 2 views
0

Является ли следующий сценарий обновления jdbcTemplate потокобезопасным? то, что она в принципе:Spring 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}); 

Что произойдет, если два обновления этого вида происходит в то же время?

Thanks,

+0

вы получите исключение: '' javax.persistence.OptimisticLockException' или OptimisticLockingFailureException' или другой .. – Jaiwo99

+0

Но я не определил замок явно .. – Urbanleg

+1

@ Jaiwo99 я сомневаюсь, что вы получите такое исключение, потому что нет Оптимистическая проверка параллелизма здесь –

ответ

0

Это не имеет ничего общего с потокобезопасностью. Вызов должен быть потокобезопасным.

СУБД будет достаточно умным, чтобы убедиться, что одно обновление завершено до того, как появится другое обновление одной записи (если вы не установили его с очень низким уровнем изоляции). Поэтому, если два потока (или процесс и т. Д.) Дважды вызывают тот же самый метод (используя тот же идентификатор баланса), одна и та же запись будет вычитаться дважды.

+0

Как я могу убедиться, что мой уровень изоляции является законным для этой задачи? – Urbanleg

Смежные вопросы