我们可以将第二个数据库用于javers审核相关表吗

时间:2019-06-21 13:54:58

标签: javers

我会提到我的问题。

我需要两个数据库。 我的应用程序表的DB1 DB2仅用于保存审计表jv _...

为解决该问题,我做了以下

`@Bean
    public ConnectionProvider jpaConnectionProvider() {
        OtherConnectionProvider other = new OtherConnectionProvider();
        try {
            other.setConnection(dataSource().getConnection());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return scp;
    }` 

OtherConnectionProvider是org.javers.repository.sql.ConnectionProvider的实现。 dataSource()是正常的javax.sql.Datasource。

使用此属性后,spring将忽略application.properties中提到的数据库属性,并在此新模式中创建与模式和javers相关的表,因为我的application.properties中包含以下内容。 spring.jpa.hibernate.ddl-auto =创建

2 个答案:

答案 0 :(得分:0)

对于MongoDB来说,为Javers审核数据设置专用数据库很容易(请参阅https://javers.org/documentation/spring-boot-integration/#starter-repository-configuration),但是没有针对SQL的现成解决方案。主要问题是在两个独立的SQL数据库中协调事务。

请参见How to configure transaction management for working with 2 different db in Spring?

答案 1 :(得分:0)

感谢您的回复。我通过以下方式修复了它。参见https://www.baeldung.com/spring-data-jpa-multiple-databases。但是在url中,它提到了两个数据库配置。应该从application.properties中选择其中一项主要配置。可以从URL https://javers.org/documentation/spring-integration/#jpa-entity-manager-integration中提到的spring配置中获取第二个数据库配置。该解决方案非常棘手,因为spring.datasource的标准属性不适用于此处。此外,使用javers添加提交属性将有所帮助。这将充当租户信息。 以下是典型的代码,其中CustomJpaHibernateConnectionProviderorg.javers.repository.sql.ConnectionProvider

的实现
   @Bean
public ConnectionProvider jpaConnectionProvider() {
    CustomJpaHibernateConnectionProvider scp = new 
      CustomJpaHibernateConnectionProvider();
    try {
        scp.setConnection(dataSource().getConnection());
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return scp;
}

,数据源会这样。

 @Bean
    @ConfigurationProperties(prefix="spring.javers-datasource")
    public DataSource dataSource(){
        return DataSourceBuilder.create().build();
    }

数据源属性不是标准的Spring引导属性。

spring.datasource.jdbcUrl = jdbc:postgresql://localhost/test
spring.datasource.username = postgres
spring.datasource.driverClassName=org.postgresql.Driver