我有一个使用Grails 2.1.1构建的应用程序和插件,我升级到2.2.1并且遇到了一个奇怪的问题。我的应用程序开始爆炸,因为我的应用Config.groovy
中定义的配置值突然解析为groovy.Util.ConfigObject
而不是实际值。这是问题的第1部分,第2部分是在我的应用程序中,我在我的应用程序Config.groovy
中定义
grails.config.defaults.locations = [
"classpath:DemoPluginConfig.groovy",
]
DemoPluginConfig.groovy
包含此属性
oo.memcached.timeout=400000
并且DemoPluginConfig.groovy
文件位于我的Demo插件的src/java
文件夹中。
我有一个memcache服务,我试图在服务准备好后设置超时属性:
def void afterPropertiesSet() {
ConnectionFactoryBuilder cfb = new ConnectionFactoryBuilder()
def config = grailsApplication.config;
def operationTimeOut = config.oo.memcached.timeout
cfb.setOpTimeout(timeOut)
}
grails run-app此时出现错误:
Caused by MissingMethodException: No signature of method: net.spy.memcached.ConnectionFactoryBuilder.setOpTimeout() is applicable for argument types: (groovy.util.ConfigObject) values: [[:]]
Possible solutions: setOpTimeout(long)
->> 55 | unwrap in org.codehaus.groovy.runtime.ScriptBytecodeAdapter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 46 | call in org.codehaus.groovy.runtime.callsite.PojoMetaClassSite
| 45 | defaultCall . . . . . . . . . . in org.codehaus.groovy.runtime.callsite.CallSiteArray
| 108 | call in org.codehaus.groovy.runtime.callsite.AbstractCallSite
| 116 | call . . . . . . . . . . . . . in ''
| 20 | afterPropertiesSet in com.millennialmedia.ui.core.MemcachedService
| 1514 | invokeInitMethods . . . . . . . in org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
| 1452 | initializeBean in ''
| 519 | doCreateBean . . . . . . . . . in ''
| 122 | doCreateBean in org.codehaus.groovy.grails.commons.spring.ReloadAwareAutowireCapableBeanFactory
| 456 | createBean . . . . . . . . . . in org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
| 271 | resolveInnerBean in org.springframework.beans.factory.support.BeanDefinitionValueResolver
| 126 | resolveValueIfNecessary . . . . in ''
| 1360 | applyPropertyValues in org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
| 1118 | populateBean . . . . . . . . . in ''
如果我尝试运行grails run-app几次成功启动但是应用程序在加载带有另一个groovy.Util.ConfigObject
的页面时爆炸是不可序列化的错误。在应用程序爆炸之前逐步调试显示,当我们到达setOptTimeOut
行时,grailsApplication.config
仅包含来自我的应用程序的Config.groovy的配置选项,就好像来自插件的值{{ 1}}被忽略了。
恢复到2.1.1会使一切恢复正常。在这一点上,我不知道在哪里看。
答案 0 :(得分:0)
您不应该使用operationTimeOut
而不是<{1}}
timeOut
答案 1 :(得分:0)
尝试将您的Groovy配置放在 grails-app / conf 中,而不是 src / java 。然后,看看您是否可以在一致的基础上重现错误。
如果全部失败, grails clean 可能会占上风。
希望有所帮助