[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 3插件安装位置

用自定义模板 grails 上的普通字段替换 <f:all /> 标记

getGeneratedKeys() 上的 Grails Hibernate4 升级错误

已部署服务器上的 Grails 数据库迁移

Grails 3 - 资源插件