弹簧数据JPA方法执行时间
请参阅以下(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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
方法或说明是依次执行的,
UpdateQueryMethod2()
将在updatequeryMethod1()
之后执行。这还取决于您的方法是否是在Aupdatequerymethod1()
notifyupdatequerymethod2()
中执行,他updateQueryMethod2()
updatequeryMethod1()
执行结果返回返回true
Methods or instructions are executed sequentialy and
updateQueryMethod2()
will be executed afterupdateQueryMethod1()
. It also depends if your methods are excuted in a synchronous or an asynchronous way. You have many ways to implement what you want:updateQueryMethod2()
will be executed as soon asupdateQueryMethod1()
notifyupdateQueryMethod2()
that he finished is jobif
statement that will executeupdateQueryMethod2()
whenupdateQueryMethod1()
execution result returnstrue
更新必须在其修改的表上获取独家锁定,以避免写入写冲突,并且由于获得了第一个方法(交易),因此第二种方法必须等到释放独家锁才能执行其更新,因此它必须等待,只要锁定通过其他方法(交易)保留,这就是为什么长期运行的交易会损害数据库性能的原因,因此被称为锁定保留。
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.