wake-up-neo.com

Hibernate Envers mit Spring Boot - Konfiguration

Ich versuche, Hibernate Envers so einzurichten, dass sie mit meiner Spring Boot-Anwendung funktionieren.

Ich habe die Envers-Abhängigkeit hinzugefügt und @Audited -Anmerkungen hinzugefügt. Das funktioniert einwandfrei, aber ich kann keine spezifischen Envers-Eigenschaften konfigurieren. Spring Boot scheint sie nicht zu erfassen.

Ich habe insbesondere versucht, das andere Datenbankschema für Prüftabellen festzulegen, indem Sie diese auf application.properties setzen, aber ohne Erfolg:

hibernate.envers.default_schema=app_audit

oder

org.hibernate.envers.default_schema=app_audit

oder

spring.jpa.hibernate.envers.default_schema=app_audit

Keine dieser Arbeiten. Kann jemand diese einstellen?

BEARBEITEN.

Als Herr Deinum vorschlug, versuchte ich:

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

und es hat funktioniert!

18
Milan

Für alle Konfigurationseinstellungen, die nicht standardmäßig verfügbar sind, können Sie sie angeben, indem Sie ihnen einfach spring.jpa.properties voranstellen. Diese Eigenschaften werden unverändert zur EntityManagerFactory (als JPA-Eigenschaften) hinzugefügt.

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

Durch Hinzufügen des Obenstehenden zum application.properties werden die Eigenschaften hinzugefügt, und es sollten Hibernate Envers konfiguriert werden.

Dies ist auch im Spring Boot Referenzhandbuch dokumentiert.

Links

  1. JPA-Eigenschaften konfigurieren
  2. Envers-Eigenschaften
39
M. Deinum

Durchsuchen der HibernateJpaAutoConfiguration-Klasse Ich kann keine Unterstützung für Envers-Eigenschaften sehen. Das Folgende ist vielleicht nicht die beste Lösung, aber Sie können es trotzdem versuchen.

Damit Spring Boot die Envers-Eigenschaften unterstützt, müssen Sie Folgendes tun:

  1. überschreiben Sie die aktuelle AutoConfiguration-Klasse, die Spring Boot zum Konfigurieren der Hibernate-Eigenschaften verwendet, damit die Envers-Eigenschaften aus den Eigenschaftendateien gelesen werden. Dies liest die Datei spring.jpa.hibernate.envers.default_schema aus Ihre Datei und fügen Sie sie den Eigenschaften von entityManagerFactoryBean hinzu:

    @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. schließen Sie die ursprüngliche HibernateJpaAutoConfiguration aus, die Spring Boot verwendet, und fügen Sie Ihre eigene als Bean hinzu, sodass sie ersetzt wird:

    @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();
        }
    }
    
4
Gabriel Ruiu

Für diejenigen, die MySQL und Spring Boot verwenden, empfiehlt es sich:

spring.jpa.properties.org.hibernate.envers.default_schema=yourAuditSchema wird nicht funktionieren.

Verwenden Sie stattdessen diese:

spring.jpa.properties.org.hibernate.envers.default_catalog=yourAuditSchema
1
Jack Stuard