Spring Bootアプリケーションで動作するようにHibernate Enversをセットアップしようとしています。
Envers依存関係を含めて@ Auditedアノテーションを追加しましたが、正常に機能しますが、特定のEnversプロパティを構成できません。SpringBootはそれらを取得しないようです。
具体的には、私はこれらをapplication.propertiesに置くことで監査テーブルに別のdbスキーマを設定しようとしましたが、運がありませんでした:
hibernate.envers.default_schema=app_audit
または
org.hibernate.envers.default_schema=app_audit
または
spring.jpa.hibernate.envers.default_schema=app_audit
これらはどちらも機能しません。誰もがこれらを設定する方法を知っていますか?
編集
M.デイナムが提案したように、私は試しました:
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
に追加すると、プロパティが追加され、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"));
}
}
spring Bootが使用する元のHibernateJpaAutoConfigurationを除外し、独自のBeanを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