스프링 부팅을 통한 휴지 상태 서버 - 구성
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」레퍼런스 가이드에도 기재되어 있습니다.
링크
휴지 상태 Jpa를 조사AutoConfiguration 클래스 서버 속성을 지원할 수 없습니다.다음은 최선의 해결책은 아닐 수 있지만 그래도 시도해 볼 수 있습니다.
Spring Boot에서 서버 속성을 지원하려면 다음 작업을 수행해야 합니다.
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")); } }
원래 휴지 상태 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
'programing' 카테고리의 다른 글
ORA-01882: 시간대 영역을 찾을 수 없습니다. (0) | 2023.03.22 |
---|---|
메모장++에서 JSON을 포맷하는 방법 (0) | 2023.03.22 |
WordPress에서 query_posts의 모든 게시 유형을 가져옵니다. (0) | 2023.03.22 |
각도별 편집 가능한 데이터 그리드JS (0) | 2023.03.22 |
ATOM Editor에서 ESLint for React를 설정하는 방법 (0) | 2023.03.22 |