当前位置: 首页 > 知识库问答 >
问题:

如何在mysql中锁定从两个不同实例应用程序访问的行?

凌成天
2023-03-14

我在mysql查询中遇到了一个问题,我正在使用SELECT…进行更新,以锁定表数据源中的一行,这样两个实例应用程序无法同时获得相同的行。但是当我用jmeter测试我的程序时,有时mysql会返回相同的值。

我有一个id | name | last_seq表,所以当我的第一个实例应用程序选择该行时,last_seq将增加100。因此,该行的值现在是1 | opr_sequece | 100,当我的第二个实例应用程序选择该行时,会将100添加到last_seq。因此,从第二个实例中选择后,该行的值为1 | opr_sequence | 200。

但是当我运行时,有时2个实例应用程序会获得相同的值并将相同的值更新到表中。

我做选择…更新,但它仍然发生。请帮帮我

更新

public synchronized String constructTraceNo(){
    if(counter % 100 == 0){
        OprSeq oprSeq= oprSeqRepo.findByNm("opr_sequence");
        //update to repository
        counter = oprSeq.getLastSequence();
        oprSeq.setLastSequence(counter+100);
        oprSeqRepo.save(oprSeq);
    }else if(counter == 999999){
        OprSeq oprSeq= oprSeqRepo.findByNm("opr_sequence");
        counter = 0;
        oprSeq.setLastSequence(counter+100);
        oprSeqRepo.save(oprSeq);
    }
    counter+=1;
    return padding(String.valueOf(counter),6,"0",0);
}

OprSeq OPRSEK=oprSeqRepo。findByNm(“opr_sequence”);这将选择该行以及该选择下面的更新。

共有1个答案

史修谨
2023-03-14

有许多方法可以产生相同的结果。其中一些是:

  • 使用自动提交而不是显式事务
  • 不要更新记录而只选择它(例如仅在满足条件时更新记录)
  • 尝试捕获代码,以便在更新失败的情况下不会回滚
  • 如果某些代码重置值或减量值

您应该调查不同的可能性,或者使用完整代码发布更新的问题。

 类似资料:
  • 我正在努力学习vue。因此,我制作了一个小应用程序,可以显示来自API的新闻文章,并在另一个视图中允许用户登录到另一台服务器。 为此,我使用Axios。我知道我在某个时候让它工作得很好,但是今天当我开始我的项目时,让两个API同时工作是不可能的。 这是我的登录服务: 这是我的新闻服务: 这两个服务都位于不同的JS文件中,并导入到不同的vue文件中,但现在它们似乎无法共存,并且总是有一个服务覆盖另一

  • 在一次采访中,有人问我,关于多线程,假设在同一个对象上有两个线程(线程1和线程2)。Thread-1在synchronized method1()中,Thread-2能以任何方式在java中同时进入synchronized method2()吗? 我回答“不”。这里,当Thread-1处于synchronizedmethod1()时,它必须持有对象监视器上的锁,并且只有当它退出synchroniz

  • 我得写一个石英调度器来在Spring运行一个作业。我还需要添加另一个函数来暂停同一个作业。此代码存在于单个独立批处理中。 触发这两个功能:1。开始工作2。暂停作业我已经用main()编写了两个类来执行。 问题是当我触发pauseJobs的main()时,它会启动不同的应用程序上下文,而不是使用相同的应用程序上下文。 > 用于Application Context初始化的Singleton类 类开始

  • 问题内容: 我们正在做一个MySQL的小型基准测试,我们希望了解它对数据的性能。 该测试的一部分是查看当多个并发线程对服务器执行各种查询时,服务器如何工作。 在MySQL文档(5.0)是不是多线程的客户真的清楚。我应该指出,我确实针对线程安全库()进行了链接 我正在使用准备好的语句,并且同时执行读取(SELECT)和写入(UPDATE,INSERT,DELETE)操作。 我应该为每个线程打开一个连

  • 我对Spring框架有点陌生。我有一个用Spring (4.2.1)编写的web应用程序。我正在尝试使用千分尺库来揭示度量标准,并将与普罗米修斯一起使用。 应用程序的相关结构如下: -核心模块(JAR) -webservice模块(WAR) 我创建了一个PrometheusService类,它是在核心模块中定义的bean。bean中定义的是和: 我创建了指标资源,它是一个公开 /Metrics e

  • 问题内容: 这是场景:我有一个在servlet容器中运行的多线程Java Web应用程序。该应用程序在servlet容器内多次部署。在不同的服务器上运行着多个servlet容器。 也许这张图很清楚: 网络共享目录中有一个文件,所有这些线程都可以访问。而且他们确实经常访问该文件。在大多数情况下,文件仅由那些线程读取。但有时它是书面的。 我需要一个故障保护解决方案来同步所有这些线程,以便保证数据的一致