Mil*_*lan 21 spring hibernate jpa hibernate-envers spring-boot
我正在尝试设置Hibernate Envers以使用我的Spring Boot应用程序.
我已经包含了Envers依赖项并添加了@Audited注释,它工作正常,但我无法配置特定的Envers属性,Spring Boot似乎没有接受它们.
具体来说,我试图通过将这些设置为application.properties来为审计表设置不同的数据库模式,但没有运气:
hibernate.envers.default_schema=app_audit
Run Code Online (Sandbox Code Playgroud)
要么
org.hibernate.envers.default_schema=app_audit
Run Code Online (Sandbox Code Playgroud)
要么
spring.jpa.hibernate.envers.default_schema=app_audit
Run Code Online (Sandbox Code Playgroud)
这些都不奏效.有谁知道如何设置这些?
编辑.
正如M. Deinum建议我尝试的那样:
spring.jpa.properties.org.hibernate.envers.default_schema=app_audit
Run Code Online (Sandbox Code Playgroud)
它工作了!
M. *_*num 43
对于默认情况下不可用的所有配置设置,您可以通过为它们添加前缀来指定它们spring.jpa.properties.这些属性将按原样添加到EntityManagerFactory(作为JPA属性).
spring.jpa.properties.org.hibernate.envers.default_schema=app_audit
Run Code Online (Sandbox Code Playgroud)
将上面的application.properties内容添加到将添加属性,并应配置Hibernate Envers.
Spring Boot 参考指南中也记录了这一点.
链接
查看 HibernateJpaAutoConfiguration 类,我看不到对 envers 属性的任何支持。以下可能不是最佳解决方案,但您可以尝试一下。
为了让 Spring Boot 支持 envers 属性,您必须:
覆盖 Spring Boot 用于配置 Hibernate 属性的当前 AutoConfiguration 类,因此它将从您的属性文件中读取 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"));
}
}
Run Code Online (Sandbox Code Playgroud)排除 Spring Boot 使用的原始 HibernateJpaAutoConfiguration 并将您自己的添加为 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();
}
}
Run Code Online (Sandbox Code Playgroud)小智 5
对于使用MySQL和Spring Boot 的人,建议使用:
spring.jpa.properties.org.hibernate.envers.default_schema=yourAuditSchema 不管用。
改用这个:
spring.jpa.properties.org.hibernate.envers.default_catalog=yourAuditSchema
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17141 次 |
| 最近记录: |