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
私のデモプラグインのフォルダーにあります。サービスの準備ができたら、そのタイムアウト プロパティを設定しようとしている 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 に戻すと、すべてが正常に戻ります。この時点で、どこを見ればいいのかわかりません。