grails的服务使用boolean transactional = true来为服务中每个方法添加事务,事务缺省的传播模式是Propagation.REQUIRED,readOnly=false,不能修改,如果服务中的有些方法需要只读事务,则这种方式不能满足要求。 由于grails的服务是一个bean,可以使用spring的注解事务@Transactional来配置服务方法的事务,可以对事务属性进行细粒度配置,不过需要为服务添加一个接口才能使用@Transactional。例子如下:
public interface Service {
void foo();
}
import org.springframework.transaction.annotation.Transactional
class FooService implements Service {
@Transactional(readOnly=false)
public void foo(){}
}