Hibernate Envers с весенней загрузкой-конфигурация

Я пытаюсь настроить Hibernate Envers для работы с моим приложением Spring Boot.

Я включил зависимость Envers и добавил @Audited аннотации и он отлично работает, но я не могу настроить определенные свойства Envers, Spring Boot, похоже, не подбирает их.

в частности, я попытался установить другую схему БД для таблиц аудита, поместив их в приложение.свойства, но без удача:

hibernate.envers.default_schema=app_audit

или

org.hibernate.envers.default_schema=app_audit

или

spring.jpa.hibernate.envers.default_schema=app_audit

ни то, ни другое не работает. Кто-нибудь знает, как их установить?

правка.

как M. Deinum предложил я пробовал:

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

и это сработало!

3 ответов


для всех тех параметров конфигурации, которые по умолчанию недоступны, вы можете указать их, просто добавив префикс spring.jpa.properties. Эти свойства будут добавлены, как есть, в EntityManagerFactory (Как свойства JPA).

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

добавление выше application.properties добавит свойства и должен настроить Hibernate Envers.

это также задокументировано в Spring Boot ссылка руководство.

ссылки

  1. настройка свойств JPA
  2. Свойства Envers

просматривая класс HibernateJpaAutoConfiguration, я не вижу никакой поддержки свойств envers. Следующее Может быть не лучшим решением, но тем не менее вы можете попробовать.

для того, чтобы Spring Boot поддерживал свойства envers, вы должны:

  1. переопределите текущий класс автоконфигурации, который Spring Boot использует для настройки свойств Hibernate, чтобы он считывал свойства envers из ваших файлов свойств. Этот будет читать весна.jpa.зимовать.Энверы.значение default_schema из вашего файла и добавьте его в свойства 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. исключите исходную HibernateJpaAutoConfiguration, которую использует Spring Boot, и добавьте свой собственный как Боб, чтобы он был заменен:

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

для тех, кто использует в MySQL и Весна Загрузки, предложение использования:

spring.jpa.properties.org.hibernate.envers.default_schema=yourAuditSchema не будет работать.

используйте этот код:

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