gpt4 book ai didi

hibernate - Spring同步方法不同步

转载 作者:行者123 更新时间:2023-11-28 21:49:05 25 4
gpt4 key购买 nike

环境:

  • Apache tomcat 7

  • Java 7

  • 甲骨文 11g

  • eclipse

  • apache jmeter 2.1

  • Spring

  • hibernate

    我正在开发一个 Web 应用程序,它接收来自客户端的请求并根据请求类型为它们生成序列号以用于进一步处理。为了生成唯一的序列号,我有一种方法可以从数据库中获取当前序列号并将其递增 1,然后用新的序列号更新该记录。

函数:

    @Transactional
public synchronized Long generateSequenseNumber(String requestType) {
//get current sequence number for this requestType
//increment it by one
//update it in DB

}

该函数工作正常,但问题是当我从压力测试工具 (JMeter) 调用应用程序以每秒发送 50 个请求时,出现以下异常:

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [

虽然函数是同步的。

任何建议都会有所帮助。谢谢。

最佳答案

问题是@Transactional 在进入同步方法之前开始 session 并在方法完成后提交更改,因此对数据库的更改不会在同步方法内应用。

请查看Spring @Transactional第 10.5.1 节。

您可以尝试在调用此方法时添加同步块(synchronized block)而不是使其同步:

synchronized(this){
generateSequenseNumber();
}

关于hibernate - Spring同步方法不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22378707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com