Overriding META-INFservicesorg.hibernate.integrator.spi.In



我正在使用休眠版本(4.3.5版本)。使用条件审计(15.8.休眠Envers文档),我继承了EnversIntegrator,创建了我自己的客户EnversIntegrator。为了使 envers 使用这个,我在 META-INF\services\org.hibernate.integrator.spi.Integrator 中添加了 customerEnversIntegrator 路径。它工作正常!当我将其保留为默认值时,但更改了应用程序 META-INF\services\org.hibernate.integrator.spi.Integrator 以指向客户EnversIntegrator 未完全使用。所以它实际上不起作用但我不希望这个声明在 jar 级别。我需要从应用程序中覆盖它。因为作为一个项目 - 我无法控制 jar,它可以更新等等。

任何想法如何在不更改 Jar 中的任何内容的情况下覆盖此文件?

不幸的是,Envers 条件审计设置是侵入性的,这正是 Envers 6 想要采用侵入性较小的不同方法的原因。

您可以做的是通过指定 Hibernate 配置属性来关闭标准 EnversIntegrator实现,这将导致 envers 的标准集成器不启动,也不注册标准事件侦听器等。

hibernate.listeners.envers.autoRegister=false

然后,注册自己的自定义Integrator,该模仿标准实现,但由于明显的原因不检查上述配置属性是否存在,并且注册自定义侦听器而不是标准侦听器。

这应该避免手动更改hibernate-envers工件或执行任何生成时库操作。

我很可能会在将来删除此配置选项,因为带注释的条件审核方法将成为这里的首选,并且避免必须强制希望这样做的用户复制内部代码以使用此类功能。

最新更新