0

我只是在想是否可以取消或停止正在进行的服务或工作?例如,我有一个代码调用服务中的方法,然后用户突然想要取消所述操作。由于它是事务性的,是否可以停止或回滚在取消服务之前所做的更改?假设我有这个代码:

class SomeService {
    static transactional = true
    
    def someMethod() {
        //some business logic here 
    
        SomeTriggeredJob.triggerNow((java.util.LinkedHashMap)[params: queriedParams]
    }
}

如果它已经在执行,有没有办法取消它?

4

3 回答 3

0

要取消一个服务的事务上下文,您可以在服务中启动一个抛出,如果您需要执行此服务的传出,您可以将其封装在一个方法中。

serviceExample.doCancel()

*"结果是所有方法都包装在事务中,如果方法抛出运行时异常(即扩展 RuntimeException 的异常)或错误,则会发生自动回滚。事务的传播级别默认设置为 PROPAGATION_REQUIRED。检查的异常不要回滚事务。尽管 Groovy 模糊了已检查异常和未检查异常之间的区别,但 Spring 并没有意识到这一点,并且使用了它的默认行为,因此了解已检查异常和未检查异常之间的区别很重要。"*

Grails 文档 - 服务

于 2013-02-07T13:40:58.610 回答
0

如果用户取消进程并将标志保存在会话或数据库中,则将某些标志设置为 false。同时,在您正在运行的方法/作业中,放置一个循环并每次检查标志。所以,如果你在标志中得到错误,下次不要运行该作业。例如,如果用户取消设置

session.cancelFlag = false

在你的工作中,做一些类似的事情

def jobMethod(){
    someLoop.each{
        if(session.cancelFlag){
            Do your work here !
        }
    }
}
于 2013-02-07T12:26:15.060 回答
0
  1. 让用户发送取消请求;
  2. 在服务器端在数据库或会话中设置一个标志,您的工作可以访问该标志;
  3. 作业应首先读取该值并根据它 - 继续或取消。
于 2013-02-07T08:25:51.093 回答