[grails 3]:替换插件描述符上的 doWithWebDescriptor?
Posted
技术标签:
【中文标题】[grails 3]:替换插件描述符上的 doWithWebDescriptor?【英文标题】:[grails 3]: Replacement of doWithWebDescriptor on Plugin descriptor? 【发布时间】:2020-11-07 09:27:22 【问题描述】:我们正在尝试将现有的 grails 2.5 应用程序迁移到更新版本的 grails。对于该采用策略,首先升级到 grails 3.3.11(3.x 版本中的最新版本),然后迁移到 grails 4。
对于 grails 2.5.6 应用程序中的一项功能,我发现任何地方都没有任何文档记录,或者我可能错过了文档中的那部分!这是关于插件描述符的doWithWebDescriptor
。通过这个闭包,我们可以根据一些规则动态更新 web.xml。
升级到 grails 3 后,我发现 doWithWebDescriptor
不起作用。它没有初始化它应该做的任务(就 grails 2.5 而言)。后来发现grails 3.0 documentation之后没有任何文档记录。
如果doWithWebDescriptor
被删除,那么用 grails 3 或最新的 grails 4 版本最合适的替代品是什么?如果它仍然可以正常工作,并且 grails 3 需要进行一些与配置相关的更改,那么请指出那部分。
更新:
我们需要doWithWebDescriptor
的原因是,我们正在尝试添加基于插件的servlet。实际上,我们有几个插件用于应用程序中的不同模块。并非项目中包含所有插件。根据选择的模块,我们正在向应用程序添加插件。因此,如果包含插件,那么我们需要在 web.xml 中添加 servlet 和过滤器。
谢谢。
【问题讨论】:
你还没有描述你需要完成什么。如果你能总结出你想做什么赢doWithWebDescriptor
,那么可以就如何实现这一点提出建议。
感谢您的回复。我已经更新了需要doWithWebDescriptor
的问题
【参考方案1】:
我们需要 doWithWebDescriptor 的原因是,我们正在尝试添加 基于插件的servlet。
您可以通过在应用程序上下文中注册 ServletRegistrationBean
来添加 servlet。您可以在插件的doWithSpring
方法或应用程序的resources.groovy
中执行此操作。示例:
Closure doWithSpring() ->
myServlet(ServletRegistrationBean, new MyServlet(), "/myServlet/*")
loadOnStartup = 2
我们已在http://docs.grails.org/3.3.11/guide/plugins.html#hookingIntoRuntimeConfiguration 的18.5 Hooking into Runtime Configuration部分记录了这一点。
【讨论】:
它对我有用。谢谢! :) 我必须创建一个过滤器并以相同的方式注册一个 servlet 侦听器,对吧? “我必须以同样的方式创建一个过滤器并注册一个 servlet 侦听器,对吧?” - 对于过滤器,是的。我不知道 servlet 监听器。 找到了。像普通的 Spring Bean 一样注册一个监听器。有一些论坛建议使用 Spring Boot 的ServletListenerRegistrationBean
。也尝试过这种方法,但它没有注册监听器。所以像普通的 Spring bean 一样注册它。 memoryCleanListener(MemoryCacheCleanListener)
以上是关于[grails 3]:替换插件描述符上的 doWithWebDescriptor?的主要内容,如果未能解决你的问题,请参考以下文章
Grails 2.3 数据库迁移上的“加载插件管理器时出错:TomcatGrailsPlugin”
用自定义模板 grails 上的普通字段替换 <f:all /> 标记