Hibernate Envers с настройкой Spring Boot - конфигурация
Я пытаюсь настроить Hibernate Envers для работы с моим приложением Spring для загрузки.
Я включил зависимость Envers и добавил аннотации @Audited, и она отлично работает, но я не могу настроить определенные свойства Envers, Spring Boot, похоже, не забирает их.
В частности, я попытался установить другую схему db для таблиц аудита, поставив их в application.properties, но не повезло:
hibernate.envers.default_schema=app_audit
или
org.hibernate.envers.default_schema=app_audit
или
spring.jpa.hibernate.envers.default_schema=app_audit
Ни одна из этих работ не работает. Кто-нибудь знает, как их установить?
ИЗМЕНИТЬ.
Как предположил М. Дейнус, я попытался:
spring.jpa.properties.org.hibernate.envers.default_schema=app_audit
и это сработало!
Ответы
Ответ 1
Для всех тех параметров конфигурации, которые по умолчанию недоступны, вы можете указать их, просто префикс их с помощью spring.jpa.properties
. Эти свойства будут добавлены, как есть, к EntityManagerFactory
(как свойства JPA).
spring.jpa.properties.org.hibernate.envers.default_schema=app_audit
Добавление вышеуказанного в application.properties
добавит свойства и должно настроить Hibernate Envers.
Это также описано в справочнике Spring Boot .
Ссылки
Ответ 2
Просматривая класс HibernateJpaAutoConfiguration, я не вижу поддержки свойств envers. Возможно, это не лучшее решение, но тем не менее вы можете попробовать.
Чтобы Spring Boot поддерживал свойства envers, которые вы должны:
-
переопределяет текущий класс AutoConfiguration, который Spring Boot использует для настройки свойств Hibernate, поэтому он будет считывать свойства envers из ваших файлов свойств.
Это прочитает spring.jpa.hibernate.envers.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"));
}
}
-
исключить исходную конфигурацию HibernateJpaAutoConfiguration, которую использует Spring Boot и добавить свой собственный как bean, чтобы она была заменена:
@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();
}
}