revtype envers spring hibernate jpa spring-boot hibernate-envers

revtype - Hibernate Envers con Spring Boot-configuración



hibernate envers properties (3)

Estoy intentando configurar Hibernate Envers para que funcione con mi aplicación Spring Boot.

He incluido la dependencia de Envers y agregado las anotaciones @Audited y funciona bien, pero no puedo configurar las propiedades específicas de Envers, Spring Boot no parece recogerlas.

Específicamente, he intentado establecer los diferentes esquemas de db para las tablas de auditoría poniendo estos en application.properties , pero sin suerte:

hibernate.envers.default_schema=app_audit

o

org.hibernate.envers.default_schema=app_audit

o

spring.jpa.hibernate.envers.default_schema=app_audit

Ninguno de estos trabajos. ¿Alguien sabe cómo configurar estos?

EDITAR.

Como el señor Deinum sugirió que intenté:

spring.jpa.properties.org.hibernate.envers.default_schema=app_audit

¡Y funcionó!


Mirando a través de la clase HibernateJpaAutoConfiguration no puedo ver ningún soporte para las propiedades envers. Es posible que la siguiente no sea la mejor solución, pero puede intentarlo.

Para que Spring Boot admita las propiedades envers, debes:

  1. anule la clase de configuración automática actual que Spring Boot usa para configurar las propiedades de Hibernate, de modo que lea las propiedades de los envers de sus archivos de propiedades. Esto leerá el archivo spring.jpa.hibernate.envers.default_schema de su archivo y lo agregará a las propiedades de entityManagerFactoryBean :

    @Configuration public class HibernateEnversAutoConfiguration extends HibernateJpaAutoConfiguration { private RelaxedPropertyResolver environment; public HibernateEnversAutoConfiguration() { this.environment = null; } @Override public void setEnvironment(Environment environment) { super.setEnvironment(environment); this.environment = new RelaxedPropertyResolver(environment, "spring.jpa.hibernate."); } @Override protected void configure(LocalContainerEntityManagerFactoryBean entityManagerFactoryBean) { super.configure(entityManagerFactoryBean); Map<String, Object> properties = entityManagerFactoryBean.getJpaPropertyMap(); properties.put("hibernate.envers.default_schema", this.environment.getProperty("envers.default_schema")); } }

  2. excluya la configuración original de HibernateJpaAuto que utiliza Spring Boot y agregue la suya como un bean para que sea reemplazado:

    @EnableAutoConfiguration(exclude = HibernateJpaAutoConfiguration.class) @EnableJpaRepositories(basePackages = "com.gabrielruiu.test") @EntityScan(basePackages = "com.gabrielruiu.test") @ComponentScan(basePackages = "com.gabrielruiu.test") @Configuration public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } @Bean public HibernateEnversAutoConfiguration hibernateEnversAutoConfiguration() { return new HibernateEnversAutoConfiguration(); } }


Para aquellos que usan MySQL y Spring Boot , la sugerencia de usar:

spring.jpa.properties.org.hibernate.envers.default_schema=yourAuditSchema no funcionará.

Use esto en su lugar:

spring.jpa.properties.org.hibernate.envers.default_catalog=yourAuditSchema


Para todos los ajustes de configuración que no están disponibles de forma predeterminada, puede especificarlos simplemente spring.jpa.properties con spring.jpa.properties . Esas propiedades se agregarán, como es, a EntityManagerFactory (como Propiedades de JPA).

spring.jpa.properties.org.hibernate.envers.default_schema=app_audit

Al agregar lo anterior a application.properties se agregarán las propiedades y se debe configurar Hibernate Envers.

Esto también se documenta en la guía de referencia de Spring Boot.

Campo de golf

  1. Configurar propiedades JPA
  2. Propiedades de Envers