更改服务方法的名称时出现 Grails ReloadingException

Posted

技术标签:

【中文标题】更改服务方法的名称时出现 Grails ReloadingException【英文标题】:Grails ReloadingException when changing a service method's name 【发布时间】:2014-09-13 04:39:36 【问题描述】:

我正在使用 Grails 2.3.8

当我在服务类中更改方法的名称并尝试调用它时,我收到类似以下的错误:

org.springsource.loaded.ReloadException: ReloadableType.determineDispatcher(): expected com.SomeService$$EnhancerBySpringCGLIB$$a85275cb to be reloadable

现在我猜这是因为实际的服务类被包裹在 spring 的“增强器”中,这在某种程度上使它无法重新加载,但我不确定为什么,我还没有找到任何相关信息。

是否有解决方法,或者我是否必须在更改方法名称时重新启动应用程序?

【问题讨论】:

【参考方案1】:

要修复 grails 控制台中的可重新加载警告,请执行以下步骤:

    从这里下载 springloaded-1.2.0:http://search.maven.org/remotecontent?filepath=org/springframework/springloaded/1.2.0.RELEASE/springloaded-1.2.0.RELEASE.jar 将此 jar 复制到 grails-2.3.7/lib/org.springframework/springloaded/jars

    编辑 grails-2.3.7/bin/startGrails 文件,搜索 AGENT_STRING 并将 AGENT_STRING 更改为指向它而不是发行版中包含的 1.1.5。它应该是这样的:

    设置 AGENT_STRING=-javaagent:"%GRAILS_HOME:\=/%/lib/org.springframework/springloaded/jars/springloaded-1.2.0.RELEASE.jar" -noverify -Dspringloaded=\"%SPRINGLOADED_PARAMS%\"

    重启 grails

【讨论】:

这很有趣。它按预期工作,但引发以下错误:Plugin [services:2.3.8] could not reload changes to file [/SomeService.groovy]: Cannot get property 'cacheOperationSource' on null object [ERROR][org.codehaus.groovy.grails.plugins.AbstractGrailsPluginManager]【参考方案2】:

在 Grails 2.3 中,使用 grails 命令启用重新加载:

grails -reloading run-app

或者你可以设置

grails.reload.enabled = true

在 BuildConfig.groovy 中

这两种方法都不完美。更多参考请看这里:

https://grails.org/Auto+Reloading

Grails 2.3.0 Auto-reloading not working

【讨论】:

我启用了重新加载,它在大多数情况下都有效。我还注意到文档中关于 typed vs untyped injection 的评论,我都尝试过,但都没有成功。

以上是关于更改服务方法的名称时出现 Grails ReloadingException的主要内容,如果未能解决你的问题,请参考以下文章

在 Grails 的 Spring Security Rest Plugin 中注销时出现 404

切换到 HTTPS 时出现 Grails + Tomcat + Apache 错误

Groovy:使用 Grails 和 Spring 安全核心插件时出现意外令牌

使用 Acegi 和 Grails 通过 LDAP 进行身份验证时出现 PartialResultException

尝试在 Tomcat 中启动 grails App 时出现“严重:错误 listenerStart”

如何在 Grails 3 中更改应用程序名称?