【问题标题】:Spring data - modifying query concurrencySpring data - 修改查询并发
【发布时间】:2014-02-11 16:33:14
【问题描述】:

我有以下存储库:

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);
}

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

谢谢!

【问题讨论】:

    标签: java mysql spring concurrency spring-data


    【解决方案1】:

    它会遇到 ACID(原子性、一致性、隔离性、持久性)问题。因此更好地使用事务请参考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
    

    【讨论】:

    • 如果我在我的服务上使用@Transactional 注释,它会是线程安全的吗?
    • @Urbankleg 是的将是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2015-11-22
    • 2021-05-25
    • 1970-01-01
    • 2018-03-01
    • 2014-10-04
    相关资源
    最近更新 更多