java - Spring data - 修改查询并发

标签 java mysql spring concurrency spring-data

我有以下存储库:

public interface PlayerRealBalanceRepository extends JpaRepository<PlayerRealBalance, Long> {

   @Modifying
   @Query("update PlayerRealBalance balance set balance.balance = (balance.balance + ?1) where balance.id = ?2")
   public void increaseBalance(long amount, long balanceId);
}

我的问题 - 这个查询线程安全吗?如果完全同时执行 2 个这样的并发查询怎么办?我必须使用锁定方法才能正常工作吗?

谢谢!

最佳答案

会遇到ACID(Atomicity, Consistency, Isolation, Durability)问题。因此更好用事务请引用spring事务管理here供您引用的是日志(不言自明)如果您实现事务管理(尽管我使用 Mybatis)会发生什么

2014-02-11 16:48:21,008 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Switching JDBC Connection [jdbc:oracle:thin] to manual commit
2014-02-11 16:48:21,013 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
2014-02-11 16:48:21,021 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16a23cf]
2014-02-11 16:48:21,091 [main] DEBUG o.m.s.t.SpringManagedTransaction - JDBC Connection [jdbc:oracle:thin:] will be managed by Spring

// does the db operation


2014-02-11 16:48:21,792 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16a23cf]
2014-02-11 16:48:21,792 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Initiating transaction commit
2014-02-11 16:48:21,792 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Committing JDBC transaction on Connection [jdbc:oracle:thin:]
2014-02-11 16:48:21,792 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16a23cf]
2014-02-11 16:48:21,792 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16a23cf]
2014-02-11 16:48:21,792 [main] DEBUG o.s.jdbc.datasource.DataSourceUtils - Resetting isolation level of JDBC Connection [jdbc:oracle:thin:] to 2
2014-02-11 16:48:21,792 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Releasing JDBC Connection [jdbc:oracle:thin:@] after transaction
2014-02-11 16:48:21,792 [main] DEBUG o.s.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource

关于java - Spring data - 修改查询并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707550/

相关文章:

java - 如何获取JDBC中所有表的主键?

java - Chrome 移动模拟屏幕截图出现 Ashot 问题

java - 处理用户选择的文件的子文件夹

java - Apache cxf java-first 和 SOAP 模块 npm

mysql - 使用 mysqldump.exe 备份数据库时,我收到 'access is denied' 消息。知道为什么吗?

java - 使用 @EnableWebMvc 和 WebMvcConfigurerAdapter 进行静态资源定位的 Spring MVC 配置导致 "forward:"和 "redirect:"出现问题

java - 使用 Spring Batch 写入多个文件

javascript - Angular 无法正确发送 http post

mysql - 使用主键作为 HTML 元素的 id 通常可以接受吗?

java - Spring MVC 使用模态删除