grails + singleton服务,用于将对象保存到云应用程序的数据库

时间:2012-06-19 11:32:53

标签: spring grails gorm spring-webflow grails-plugin

这里我有一个名为'DataSaveService'的服务,我用它来保存对象,如..

class DataSaveService {

    static transactional = true

    def saveObject(object)
    {
        if(object != null)
        {
            try
            {
                if(!object.save())
                {
                    println( ' failed to save ! ')
                    System.err.println(object.errors)
                    return false
                }
                else
                {
                    println('saved...')
                    return true
                }
            }
            catch(Exception e)
            {
                System.err.println("Exception :" + e.getMessage())
                return false
            }
        }
        else
        {
            System.err.println("Object " + object + " is null...")
            return false
        }

    }
}

这项服务很常见,并被许多类对象用于存储。 当有多个请求时,那里的保存很慢或你可以说它笨重。由于默认范围,即单身。

所以,我认为为了减少工作量,我将把这项服务作为会话范围。像..

static scope ='session'

然后我在控制器中访问此服务和方法后,它生成异常.. 如何处理会话范围服务?,实现此方案的任何其他想法......?

主要是我想要在云中获得最佳性能。是的,我需要回答云。

1 个答案:

答案 0 :(得分:2)

Singleton(如果它没有标记为synchronized)可以同时从不同的线程调用,并行,没有性能损失,它不是瓶颈。

但是如果你真的需要线程安全(意味着你有一些共享状态,那应该在一个方法调用中使用,或者在一个http请求期间从应用程序的不同部分使用,或者甚至来自同一用户的不同请求,并且你不是要在云端运行您的应用程序,然后您可以使用不同的范围,例如sessionrequest范围。但我不确定这是一个很好的架构。

对于您当前的示例,使用非单一范围没有任何好处。而且,您必须知道,几乎没有相同服务的实例需要额外的内存和CPU资源。