0

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 に戻すと、すべてが正常に戻ります。この時点で、どこを見ればいいのかわかりません。

4

2 に答える 2

0

以下operationTimeOutの代わりに使用すべきではありませんかtimeOut

cfb.setOpTimeout(timeOut)
于 2013-03-28T01:32:25.393 に答える
0

Groovy 構成をsrc/javaではなくgrails-app/confに配置してみてください。次に、一貫してエラーを再現できるかどうかを確認します。

すべてが失敗した場合、grails cleanが優先される可能性があります。

それが役に立てば幸い

于 2013-03-28T02:37:20.847 に答える