我有一个应用程序和一个使用 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
文件位于src/java
我的 Demo 插件的文件夹中。我有一个 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 中的配置选项,就好像插件中的值DemoPLuginConfig.groovy
被忽略了一样。
恢复到 2.1.1 使一切恢复正常。在这一点上,我不知道在哪里看。