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 ссылка руководство.
ссылки
просматривая класс HibernateJpaAutoConfiguration, я не вижу никакой поддержки свойств envers. Следующее Может быть не лучшим решением, но тем не менее вы можете попробовать.
для того, чтобы Spring Boot поддерживал свойства envers, вы должны:
-
переопределите текущий класс автоконфигурации, который 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")); } }
-
исключите исходную 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