覆盖META-INF \ services \ org.hibernate.integrator.spi.Integrator

时间:2017-11-09 15:39:07

标签: java hibernate hibernate-envers

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

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

1 个答案:

答案 0 :(得分:0)

不幸的是,Envers条件审核设置是侵入性的,这正是Envers 6想要采用不那么具有侵入性的不同方法的原因。

你可以做的是通过指定Hibernate配置属性来关闭标准的Envers Integrator实现,这将导致标准集成器无法启动,而不会注册标准事件监听器等。

hibernate.listeners.envers.autoRegister=false

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

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

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