我会提到我的问题。
我需要两个数据库。 我的应用程序表的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 =创建
答案 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添加提交属性将有所帮助。这将充当租户信息。
以下是典型的代码,其中CustomJpaHibernateConnectionProvider
是org.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