我只是在考虑是否可以取消或停止正在进行的服务或工作?例如,我有一个代码调用服务中的方法,然后用户突然想要取消所述操作。是否有可能停止或回滚服务取消之前所做的更改,因为它是事务性的?假设我有这段代码:
class SomeService {
static transactional = true
def someMethod() {
//some business logic here
SomeTriggeredJob.triggerNow((java.util.LinkedHashMap)[params: querriedParams]
}
}
有没有办法取消它,如果它已经在执行?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果用户取消进程并将标志保存在会话或数据库中,请将某些标志设置为false。而在您正在运行的方法/作业中,放置一个循环并每次检查该标志。所以,如果你在旗帜中弄错了,那么下次不要运行这份工作。 例如,如果用户取消设置
session.cancelFlag = false
在你的工作中,做一些像
这样的事情def jobMethod(){
someLoop.each{
if(session.cancelFlag){
Do your work here !
}
}
}
答案 2 :(得分:0)
要取消一个服务的事务上下文,您可以启动一个投入服务,如果您需要执行此服务的传出,您可以在方法中填充它。
serviceExample.doCancel()
*“结果是所有方法都包含在事务中,并且如果方法抛出运行时异常(即扩展RuntimeException的异常)或Error,则会发生自动回滚。事务的传播级别默认设置为PROPAGATION_REQUIRED 。 已检查的异常不会回滚事务。尽管Groovy模糊了已检查和未检查异常之间的区别,但Spring并未意识到这一点,并且使用了其默认行为,因此理解已检查和未检查异常之间的区别非常重要。“*