Java 在事务中切换线程是一种不好的做法吗?
我想知道在事务中切换线程是否只是自找麻烦 由于下面的代码阻塞了一个线程,而在其他线程中执行操作,这似乎是一种浪费,必须有更好的方法,欢迎提供任何建议或想法。提前谢谢 我正在尝试从数据库加载某些内容,并在进行一些更改后保存它:Java 在事务中切换线程是一种不好的做法吗?,java,spring-transactions,project-reactor,Java,Spring Transactions,Project Reactor,我想知道在事务中切换线程是否只是自找麻烦 由于下面的代码阻塞了一个线程,而在其他线程中执行操作,这似乎是一种浪费,必须有更好的方法,欢迎提供任何建议或想法。提前谢谢 我正在尝试从数据库加载某些内容,并在进行一些更改后保存它: public Mono<SomeThing> updateSomething(int i) { TransactionStatus tx = openTx(); return Mono.just(i) .publishOn(wor
public Mono<SomeThing> updateSomething(int i) {
TransactionStatus tx = openTx();
return Mono.just(i)
.publishOn(workerThread)
.flatMap(this::loadSomethingFromDbById)
.map(Something::doSomeChange)
.flatMap(this::saveSomethingToDb)
.publishOn(Schedulers.immediate())
.doFinally(s -> closeTx(s));
}
public void blockingUpdateSomething() {
updateSomething(1).block();
}
公共Mono更新方法(inti){
TransactionStatus tx=openTx();
返回Mono.just(i)
.publishOn(workerThread)
.flatMap(this::loadSomethingFromDbById)
.map(某物::doSomeChange)
.flatMap(此::saveSomethingToDb)
.publishOn(Schedulers.immediate())
.doFinally(s->closeTx(s));
}
public void blockingUpdateSomething(){
updateMething(1.block();
}
因此,如果事务在这方面工作得很好,我可能更喜欢原始的线程舞蹈代码。回答您的问题,是的,在事务中切换线程是一种不好的做法。然而,您的代码似乎没有做到这一点,它只是使用了一种非常规的方式来锁定共享资源。感觉这是一个非常非常糟糕的主意。我想知道你们为什么要问。所以,我想我不应该在事务中切换线程?我问这个问题是因为我想知道如何正确处理事务,如果我的代码离那个太远,很抱歉。正确吗?不要切换线程。我想如果我像这样重新编码:@Transactional public SomeThing updatemething(int I){SomeThing st=loadSomethingFromDbById(I);st.doSomeChange();return savesomething todb(st);}更为传统,但不能并行处理,例如,同时发出两个http请求。对吗?很抱歉设置了格式,无法将其正确设置。