我们可以为 javers 审计相关表使用第二个数据库吗

Can we use a second database for javers audit related tables

我会提到我的问题。

我需要两个数据库。 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-自动=创建

为 Javers 审计数据设置专用数据库对于 MongoDB(参见 https://javers.org/documentation/spring-boot-integration/#starter-repository-configuration)很容易,但是对于 SQL 没有 out-of-the 框解决方案。主要问题是协调两个独立 SQL 数据库中的事务。

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

感谢您的回复。我按以下方式修复了它。参见 https://www.baeldung.com/spring-data-jpa-multiple-databases. But in the url, it has mentioned about two database configuration. One of the configuration which is Primary should be picked up from application.properties. Second database configuration can be picked up from spring configuration as mentioned in the URL https://javers.org/documentation/spring-integration/#jpa-entity-manager-integration。该解决方案非常棘手,因为 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