更改服务方法的名称时出现 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