【问题标题】:Hibernate Envers with Spring Boot - configuration使用 Spring Boot 的 Hibernate Envers - 配置
【发布时间】:2014-06-21 14:40:17
【问题描述】:

我正在尝试设置 Hibernate Envers 以使用我的 Spring Boot 应用程序。

我已经包含了 Envers 依赖项并添加了 @Audited 注释,它工作正常,但我无法配置特定的 Envers 属性,Spring Boot 似乎没有选择它们。

具体来说,我尝试通过将审计表放入 application.properties 来为审计表设置不同的数据库架构,但没有运气:

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

它成功了!

【问题讨论】:

  • 前缀为spring.jpa.properties。试试spring.jpa.properties.hibernate.envers.default_schema=app_audit。另请参阅Spring Boot reference guide
  • 我把它变成了一个答案,请接受(如果你愿意,可以投票)。
  • 你是如何设法创建 envers 表的?
  • 嗯,我设置了 spring.jpa.hibernate.hbm2ddl.auto=create-drop。所以每次hibernate都会自动创建我的表。
  • @Milan 把你的答案放在答案部分,我在回答你的问题后找到了你的答案:)

标签: spring hibernate jpa spring-boot hibernate-envers


【解决方案1】:

对于所有默认情况下不可用的配置设置,您可以通过简单地在它们前面加上 spring.jpa.properties 来指定它们。这些属性将按原样添加到EntityManagerFactory(作为 JPA 属性)。

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

将以上内容添加到application.properties 将添加属性并应配置 Hibernate Envers。

这也记录在 Spring Boot reference guide

链接

  1. Configure JPA properties
  2. Envers Properties

【讨论】:

  • 考虑到所有信息,因此'org'部分是可选的吗?
【解决方案2】:

查看 HibernateJpaAutoConfiguration 类,我看不到对 envers 属性的任何支持。以下可能不是最好的解决方案,但您可以尝试一下。

为了让 Spring Boot 支持 envers 属性,您必须:

  1. 覆盖 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"));
       }
    }
    
  2. 排除 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();
        }
    }
    

【讨论】:

    【解决方案3】:

    对于使用MySQLSpring Boot的用户,使用建议:

    spring.jpa.properties.org.hibernate.envers.default_schema=yourAuditSchema 将不起作用。

    改用这个:

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

    【讨论】:

      【解决方案4】:

      我使用 yaml 格式:

      spring:
          jpa:
              properties:
                org:
                  hibernate:
                      format_sql: false
                      envers:
                          audit_table_suffix: AUDIT
                          revision_field_name: NRO_ID_REVISAO_AUDITORIA
                          revision_type_field_name: TPO_REVISAO_AUDITORIA
      

      【讨论】:

        猜你喜欢
        • 2017-07-09
        • 2020-03-16
        • 2018-06-02
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-02
        相关资源
        最近更新 更多