我需要审核应用程序中某些实体的更改,并且正在考虑使用JaVers。我喜欢对JaVers提供的审计数据进行查询的支持。Hibernate程序看起来不错,但它将数据存储在相同的DB中。
以下是我的要求:
据我所见,JaVers并不是为上述目的而设计的,但似乎可以适应实现上述目标。下面是操作步骤:
‘
final Connection dbConnection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/javers", "root", "root");
ConnectionProvider connectionProvider = new ConnectionProvider() {
@Override
public Connection getConnection() {
//suitable only for testing!
return dbConnection;
}
};
JaversSqlRepository sqlRepository = SqlRepositoryBuilder
.sqlRepository()
.withConnectionProvider(connectionProvider)
.withDialect(DialectName.MYSQL).build();
问题:
只是FYI:与问题无关,但以下是我能想到的一些其他挑战,以及我计划如何解决这些挑战:
afterTransactionCompletion,并且只提交由该事务更新的对象。发布于 2017-10-13 17:31:18
有趣的问题。首先是戴门蒂。所有JaVers核心模块的设计都是为了将审计数据与应用程序数据分离开来。正如您所提到的,用户提供了一个ConnectionProvider供JaVers使用。可能是你想要的任何数据库。
没有设计用于多个DB的是用于SQL的Spring集成模块,因此是javers-spring-jpa和javers-spring-boot-starter-sql。它们只涉及最常见的场景,因此应用程序和JaVers的数据库是相同的。
关于异步提交的不足,您是正确的。幸运的是,它只能在JaversCore中实现,而不需要更改存储库。
API可以是:
CompletableFuture<Commit> javers.commitAsync(..., Executor);首先,Javer将对用户的对象进行快照,它非常快速,因此可以在当前线程中完成。
然后,DB读取(加载最新快照)和DB写入(插入新快照)可以异步完成(提交给给定的执行器)。
正如您所提到的,它需要DB事务的新方法。我们计划实现提交退出功能,这样应用程序就能够在主DB回滚之后撤回JaVers的提交。请参阅https://github.com/javers/javers/issues/588
https://stackoverflow.com/questions/46700959
复制相似问题