programing

스프링 부팅을 통한 휴지 상태 서버 - 구성

linuxpc 2023. 3. 22. 20:48
반응형

스프링 부팅을 통한 휴지 상태 서버 - 구성

Spring Boot 어플리케이션에서 동작하도록 Hibernate Envers를 설정하려고 합니다.

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

둘 다 효과가 없어요.이거 세팅할 줄 아는 사람 있어요?

편집.

M. Deinum이 제안했듯이,

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

그리고 그게 효과가 있었어!

디폴트로는 사용할 수 없는 모든 구성 설정에 대해 프레픽스를 붙이는 것만으로 지정할 수 있습니다.spring.jpa.properties이러한 속성은 그대로 에 추가됩니다.EntityManagerFactory(JPA 속성).

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

위의 내용을 에 추가application.properties는 속성을 추가하고 휴지 상태 Envers를 설정해야 합니다.

이것은, 「Spring Boot」레퍼런스 가이드에도 기재되어 있습니다.

링크

  1. JPA 속성 구성
  2. 등록 정보

휴지 상태 Jpa를 조사AutoConfiguration 클래스 서버 속성을 지원할 수 없습니다.다음은 최선의 해결책은 아닐 수 있지만 그래도 시도해 볼 수 있습니다.

Spring Boot에서 서버 속성을 지원하려면 다음 작업을 수행해야 합니다.

  1. Spring Boot에서 휴지 상태 속성 설정에 사용하는 현재 AutoConfiguration 클래스를 덮어쓰고 속성 파일에서 서버 속성을 읽습니다.그러면 파일에서 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. 원래 휴지 상태 Jpa 제외Spring Boot에서 사용하는 Auto Configuration(자동 구성)을 사용하여 사용자 자신의 Configuration을 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();
        }
    }
    

MySQL 및 Spring Boot을 사용하는 사용자의 경우 다음 사용을 권장합니다.

spring.jpa.properties.org.hibernate.envers.default_schema=yourAuditSchema동작하지 않습니다.

대신 이것을 사용하세요.

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

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

언급URL : https://stackoverflow.com/questions/23470041/hibernate-envers-with-spring-boot-configuration

반응형