在进行类似批处理的程序时,如果在一个action中需要保存很多记录数,这会导致grails中的数据库session超过负荷,从而导致OOM。

因为这个情况的发生是由于在一次请求中,对数据进行的修改都保存在这个请求的数据库session中,等这次请求结束后才会释放这个数据库session,这样当本次请求中对数据修改的记录数太多会导致OOM。

我们使用的是mongodb数据库,而且使用的是grails mongodb plugin,即便我们使用这个plugin中的mongodb底层链接进行操作,还是依然发生了OOM。

因此我们想能够使每次请求中只保留少量的修改数据在数据库session中,这样相当于对于具体数据的修改编写在另一个action中。示例代码如下:

    def updateData(){

        println "classId:${params.classId} usersId:${params.usersId}"

        render "ok"

    }

调用这个action的方法为:

println dataService.remoteCall(request, g.createLink(action: 'updateData', params: [classId:"test1", usersId:'usersIdxxx']))

这里的实现关键是dataService.remoteCall的函数实现,具体如下:

    /**

     * 得到协议和主机IP的url,最后不带/

     * 比如:

     * http://localhost:9090/blog/bkoff/testCaculateUserExedCount

     * 返回:http://localhost:9090

     * @param request

     * @return

     */

    private String getHostUrl(request){

        String requestUrl = request.requestURL

        String seperator = "://"

        int index = requestUrl.indexOf("://")

        index = requestUrl.indexOf("/", index + seperator.length())

        return requestUrl.substring(0, index)

    }

    /**

     * 远程调用某方法,其中actionUrl用createLink方式就可以创建

     * @param request

     * @param actionUrl

     * @return

     */

    def String remoteCall(request, actionUrl){

        def hostUrl = getHostUrl(request)

        def url = new URL(hostUrl + actionUrl)

        return url.text

    }

在grails中远程调用action的更多相关文章

  1. easyui的datagrid多次调用action的原因

    今天碰见一个非常奇怪的问题,一个页面的datagrid正常,另一个页面的datagrid两次调用action代码,比较两个页面datagrid的使用方法,并没有不同.后经仔细debug,发现问题所在: ...

  2. .w调用action

    有两种方法发送Action请求,分别是sendBizRequest和sendBizRequest2,前者返回xml格式的参数,后者提供了返回json或者xml格式的参数的能力. 1.sendBizRe ...

  3. asp.net mvc 使用Ajax调用Action 返回数据【转】

      使用asp.net mvc 调用Action方法很简单. 一.无参数方法. 1.首先,引入jquery-1.5.1.min.js 脚本,根据版本不同大家自行选择. <script src=& ...

  4. struts 页面调用Action的指定方法并传递参数

    如果为action配置了类,那么默认就会执行Action类的excute方法,Action类的写法三种: ① public class Action1 { public String execute( ...

  5. 4、看源码MVC Controller如何调用Action

    Controller继承ControllrBase,ControllerBase继承IController,而IController里只有一个Execute方法 1.ControllrBase里的Ex ...

  6. struts2 2.5.16 通配符方式调用action中的方法报404

    1.问题描述 在struts.xml中配置用通配符方式调用action中的add()方法,访问 http://localhost:8080/Struts2Demo/helloworld_add.act ...

  7. Struts2深入之动态调用Action

    使用过Struts2的小伙伴们应该知道当我们的action的方法过多是如果需要通过Struts2框架进行运行,我们就必须在Struts2的配置文件Struts2.xml文件中配置多个action属性标 ...

  8. Spark为什么只有在调用action时才会触发任务执行呢(附算子优化和使用示例)?

    Spark算子主要划分为两类:transformation和action,并且只有action算子触发的时候才会真正执行任务.还记得之前的文章<Spark RDD详解>中提到,Spark ...

  9. 通过Web API调用Action时各种类型输入参数传递值的方法

    本人微信公众号:微软动态CRM专家罗勇 ,回复280或者20180906可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . Dy ...

随机推荐

  1. SharePoint 2013 报错 异常来自 HRESULT:0X80131904

    直接上传文件,报错:该Url xxxx无效.它可能指向不存在的文件或文件夹,或者是执行不再当前网站中的有效文件或文件夹. 直接新建文件夹,报错:异常来自 HRESULT:0X80131904 以系统账 ...

  2. node ,npm和nvm 版本的管理

    node npm :node 的包管理 nvm :node 的版本管理 node -v ---->查看node 的版本  (v---->version) npm -v ----->n ...

  3. layui框架--关闭当前页面并刷新父页面

    //关闭当前页面 并刷新父页面 var index = parent.layer.getFrameIndex(window.name); parent.layer.close(index) windo ...

  4. Arrays.asList()vs Collections.singletonList()

    Collections.singletonList(something)是不可变的, 对Collections.singletonList(something)返回的列表所做的任何更改将导致Unsup ...

  5. WebSocketTest 异步通讯,实时返回数据

    using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;usin ...

  6. GZip使用

    class Program { static void Main(string[] args) { //Trace.Listeners.Clear(); //Trace.Listeners.Add(n ...

  7. 高性能MySQL(第3版) 中文PDF带目录清晰版

    下载地址: <高性能MySQL(第3版)>编辑推荐:"只要你不敢以MySQL专家自诩,又岂敢错过这本神书?""一言以蔽之,写得好,编排得好,需要参考时容易到爆 ...

  8. eclipse 安装教程

    eclipse 安装教程 一:安装包下载: 链接: https://pan.baidu.com/s/1qZtt62o 密码: 4ak2 注:若 下载链接失效,请看本文公告的QQ群,请联系群主. 二:安 ...

  9. Confluence 6 用户目录图例 - 连接 Jira 和 Jira 连接 LDAP

    上面的图: Confluence 连接到 JIRA 用户管理,JIRA 使用 LDAP 用户目录. https://www.cwiki.us/display/CONFLUENCEWIKI/Diagra ...

  10. OC对象本质

    @interface person:NSObject{ @public int _age; } @end @implementation person @end @interface student: ...