Spring 无GORMless Grails应用程序无法查找缺少(且不必要)的transactionManager

Spring 无GORMless Grails应用程序无法查找缺少(且不必要)的transactionManager,spring,grails,Spring,Grails,我的Grails 2.1应用程序在启动时就爆炸了,下面是BeanCreationException,它试图安装一个名为ServiceParamService的Grails服务。我并不奇怪它没有找到事务管理器,但我不明白它为什么要找事务管理器 在调试器中翻看,似乎决定了ServiceParamService是一个名为的“TypeSpecifiableTransactionProxyFactoryBean”,根据其性质,它接受参数target,proxyTargetClass,transaction

我的Grails 2.1应用程序在启动时就爆炸了,下面是BeanCreationException,它试图安装一个名为
ServiceParamService
的Grails服务。我并不奇怪它没有找到事务管理器,但我不明白它为什么要找事务管理器

在调试器中翻看,似乎决定了
ServiceParamService
是一个名为
的“TypeSpecifiableTransactionProxyFactoryBean”
,根据其性质,它接受参数
target
proxyTargetClass
transactionAttributeSource
transactionManager

奇怪的是,该服务在另一个Grails应用程序中实例化得很好,该应用程序也没有定义事务管理器,并且具有相同的
Config.groovy
BuildConfig.groovy
resources.xml
。所以,不知怎的,由于愚蠢的运气,另一个应用程序绕过了这个问题。除了扔掉新的应用程序(并从删除90%的旧应用程序开始),我如何才能知道旧应用程序在做什么来绕过这个虚假的事务管理器要求?和/或自己解决

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serviceParamService': Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'transactionManager' is defined
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.codehaus.groovy.grails.commons.spring.ReloadAwareAutowireCapableBeanFactory.doCreateBean(ReloadAwareAutowireCapableBeanFactory.java:130)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
... 38 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'transactionManager' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:553)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:269)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
... 49 more

默认情况下,服务是事务性的。加

static transactional = false

您的服务类,以防止它被包装在事务代理中。

这是可行的,但我不明白为什么在另一个项目中没有它就可以工作。是否存在全局默认值?我不确定为什么它会在其他应用程序中工作。默认设置一直是这样的,没有全局设置来启用或禁用它。我们最初确实在生成的服务中包含了行
static transactional=true
,但删除了它,因为将其设置为默认值是多余的。其他应用程序是否有
DataSource.groovy
?如果删除该选项,则可能不需要设置
事务性
值。