【问题标题】:How to prevent grails server sided code from running if it is already running如果 grails 服务器端代码已经在运行,如何防止它运行
【发布时间】:2011-07-27 22:25:07
【问题描述】:

我有一个关于 grails 应用程序的问题。我有一个控制器,它在服务器端做了很多工作,并且可能需要几分钟才能完成它的任务。我担心如果用户在代码运行时点击刷新,它会尝试再次运行代码。我将如何防止这种情况。下面是一些伪代码

 def refreshDb = {      
    requeryDataBase()
}

  public void requeryDatabase(){

    ....some long process here
  }

那么,如果 requeryDataBase() 已经在运行,我将如何阻止它运行?

感谢任何帮助或见解! 杰森

【问题讨论】:

    标签: grails groovy grails-controller


    【解决方案1】:

    您应该考虑在网络请求中提交form token。它存储一次性令牌,因此不允许多次提交并且可以检测到。请参阅grails framework docs on handling duplicate submissions for more details

    【讨论】:

      【解决方案2】:

      如果您希望多个用户能够使用控制器,则可以使用会话对象,如下所示。

        public void requeryDatabase(){
      if (session['queryRunning']==false) {
         session['queryRunning']=true
          ....some long process here
      session['queryRunning']=false //set to false so the user can execute the controller again
      }
       else {
         //Put code to notify the user to be pacient here
      }
        }
      

      【讨论】:

        最近更新 更多