弹簧数据JPA方法执行时间

发布于 2025-01-23 06:51:59 字数 774 浏览 0 评论 0原文

请参阅以下(sudo)代码:

public interface FooDAO extends JpaRepository<Foo, Long> {
  // Query method1 - Database needs 10 mins to finish updating  
  void updateQueryMethod1()

  // Query method2
  void updateQueryMethod2()
}

@Transactional
public class FooService {
  
  FooDao fooDao;

  void fooServiceMethod() {
    
    fooDao.updateQueryMethod1();

    fooDao.updateQueryMethod2();
  }
}

假设UpdateQueryMethod1()是数据库中耗时的查询。在数据库中完成更新需要10分钟。

我的问题是,在fooserviceMethod()方法中,Will updateQueryMethod2()等待updateQueryMethod1()才能完成数据库中的更新?

如果UpdateQueryMethod2()不等待updateQueryMethod1()完成数据库中的更新,如何制作updatequeryMethod2()等待等待()先完成其更新?

Please see following (sudo) code:

public interface FooDAO extends JpaRepository<Foo, Long> {
  // Query method1 - Database needs 10 mins to finish updating  
  void updateQueryMethod1()

  // Query method2
  void updateQueryMethod2()
}

@Transactional
public class FooService {
  
  FooDao fooDao;

  void fooServiceMethod() {
    
    fooDao.updateQueryMethod1();

    fooDao.updateQueryMethod2();
  }
}

Assume updateQueryMethod1() is a time consuming query in database. It takes 10 minutes to finish updating in the database.

My question is, in fooServiceMethod() method, will updateQueryMethod2() wait for updateQueryMethod1() to finish updating in database?

If updateQueryMethod2() does not wait for updateQueryMethod1() to finish updating in database, how to make updateQueryMethod2() wait for updateQueryMethod1() to finish its updating first?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故事与诗 2025-01-30 06:52:00

方法或说明是依次执行的,UpdateQueryMethod2()将在updatequeryMethod1()之后执行。这还取决于您的方法是否是在A

  1. noreflow noreferrer“>观察者” ()将在updatequerymethod1() notify updatequerymethod2()中执行,他
  2. 完成将执行updateQueryMethod2() updatequeryMethod1()执行结果返回返回true

Methods or instructions are executed sequentialy and updateQueryMethod2() will be executed after updateQueryMethod1(). It also depends if your methods are excuted in a synchronous or an asynchronous way. You have many ways to implement what you want:

  1. Observer Design Pattern: updateQueryMethod2() will be executed as soon as updateQueryMethod1() notify updateQueryMethod2() that he finished is job
  2. Put a if statement that will execute updateQueryMethod2() when updateQueryMethod1() execution result returns true
葬シ愛 2025-01-30 06:52:00

更新必须在其修改的表上获取独家锁定,以避免写入写冲突,并且由于获得了第一个方法(交易),因此第二种方法必须等到释放独家锁才能执行其更新,因此它必须等待,只要锁定通过其他方法(交易)保留,这就是为什么长期运行的交易会损害数据库性能的原因,因此被称为锁定保留。

Updates must acquire an exclusive lock over the TABLE they're modifying to avoid write-write conflicts,and since the first method(Transaction) acquired that ,the second method must wait until the exclusive lock is released so it can perform its update,so it must wait as long as the lock is retained by the other method(Transaction),that's why btw long running transactions are a detriment to a database performance because of this ,which is refered to as lock retention.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文