这里我有一个名为'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'
然后我在控制器中访问此服务和方法后,它生成异常.. 如何处理会话范围服务?,实现此方案的任何其他想法......?
主要是我想要在云中获得最佳性能。是的,我需要回答云。
答案 0 :(得分:2)
Singleton(如果它没有标记为synchronized
)可以同时从不同的线程调用,并行,没有性能损失,它不是瓶颈。
但是如果你真的需要线程安全(意味着你有一些共享状态,那应该在一个方法调用中使用,或者在一个http请求期间从应用程序的不同部分使用,或者甚至来自同一用户的不同请求,并且你不是要在云端运行您的应用程序,然后您可以使用不同的范围,例如session
或request
范围。但我不确定这是一个很好的架构。
对于您当前的示例,使用非单一范围没有任何好处。而且,您必须知道,几乎没有相同服务的实例需要额外的内存和CPU资源。