来自TagLib的Grails服务调用开销
我有一个非常简单的标记库和服务:来自TagLib的Grails服务调用开销,grails,service,taglib,overhead,method-call,Grails,Service,Taglib,Overhead,Method Call,我有一个非常简单的标记库和服务: class TestTagLib { FooService fooService static namespace = "bar" def test = { out << "text" } } class FooService { //This is an empty method that does absolutely nothing void foo() { } } 类Te
class TestTagLib {
FooService fooService
static namespace = "bar"
def test = {
out << "text"
}
}
class FooService {
//This is an empty method that does absolutely nothing
void foo() { }
}
类TestTagLib{
食品服务食品服务
静态名称空间=“bar”
def测试={
out服务方法在默认情况下是事务性的。因此,对于fooService.foo()
的每次调用,您将获得完整数据库事务创建和提交的开销。服务方法在默认情况下是事务性的。因此,对于fooService.foo()的每次调用
您将获得一个完整的数据库事务创建和提交的开销。我想这取决于您在foo()中所做的工作:-)正如我在示例中所说的,它实际上什么都没有做。它是一个空方法。我想这取决于您在foo()中所做的工作:-)正如我在示例中所说的,它实际上什么也不做。它是一个空方法。在这种情况下,如何使一个方法事务性地只读或根本不事务性?我最后在没有插入/删除的服务上设置了static transactional=false,如果我在方法级别需要它,我就使用@transactional(propagation=propagation.NEVER)(将传播设置为您需要的任何内容,这里是javadoc)。这很有魅力。谢谢!我倾向于尽可能多地使用注释。它还允许将某些方法标记为只读。然后hibernate可以做出更智能的优化决策。在这种情况下,您如何使方法事务性地只读还是完全不事务性?我最后提出了静态事务性对于没有插入/删除的服务,l=false,如果我在方法级别需要它,我使用@Transactional(propagation=propagation.NEVER)(将propagation设置为您需要的任何值,这里是javadoc)。这很有魅力。谢谢!我倾向于尽可能多地使用注释。它还允许将某些方法标记为只读。然后hibernate可以做出更智能的优化决策。
...
fooService.foo()
out << "test"
...