当前位置: 首页 > 知识库问答 >
问题:

用JaVers实现异步审计

夏立果
2023-03-14

以下是我的要求:

  • 异步日志记录-最小化性能影响
  • 将审核数据存储在不同的数据库中-性能原因也是

就我所见,JaVers并不是为上述目的而设计的,但似乎可以适应实现上述目的。方法如下:

    null
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();
    null
    null
  • 由于不在同一事务中执行审计,就像事务失败一样,这会使审计回滚变得复杂。因此,我们只需要审计成功提交的对象。我打算通过使用Hibernate拦截器来实现这一点,监听afterTransactionCompletity,并只提交由该事务更新的对象。
  • 对于延迟加载的对象,我可以看到,如果我们试图在事务完成后访问它们,可能会导致延迟加载的道具无法访问(因为会话可能也关闭了)--不知道如何解决这个问题,但这可能不是一个问题,因为我认为我们正在热切地加载大多数道具。

共有1个答案

苏野
2023-03-14

有趣的问题。首先是démenti。所有的JaVers核心模块都设计成将审计数据与应用程序数据解耦。正如您提到的,user提供了一个由Javers使用的ConnectionProvider。它可以是任何你想要的数据库。

设计用于SQL的Spring集成模块不是为了与多个DB一起使用,因此javers-spring-jpajavers-spring-boot-starter-sql。它们只涵盖了最常见的场景,因此应用程序和Javers的数据库是相同的。

您关于缺少异步提交的说法是对的。幸运的是,它只能在javerscore中实现,而无需更改存储库。

CompletableFuture<Commit> javers.commitAsync(..., Executor);
 类似资料:
  • 我已经开发了完全工作的POC,它工作得很好,但是像、和和这样的字段我已经使用Spring特性对这些字段进行了审计。但是这些领域我不想考虑由Javers进行审计。 我们是否可以跳过字段进行审核/更改?

  • 正在寻找有关mongo db异步提交的适当文档。我们有一个spring boot应用程序,我们试图为我们的域对象生成审计,我们希望将javers生成的审计异步提交到mongo db中,而我们的主要基于SQL的事务是此mongodb调用的fr。任何关于这方面的建议都会非常有用。

  • 我的Spring boot和Hibernate项目中有Javers实现。但是,有时javerscommit失败,这也会回滚我的业务数据库事务,因此API调用失败。 是否有可能实现Javers异步提交,这样即使Javers提交有一些问题,我的业务事务也不会生效,因此,API调用将成功? 非常感谢。

  • 我试图在这个类中实现异步任务,但问题是我在我的程序中调用了函数,该函数返回一个值,我不知道该把它放在哪里。在异步任务中,我应该在哪里定义?我得到以下例外 以下是我的主要课程: 这是我的解析类:公共类解析{ List headlines列出链接;列表描述;列出lstDate列出新日期;//字符串a,b,c,d;public InputStream getInputStream(URL URL){ t

  • 本文向大家介绍Tomcat怎么实现异步Servlet,包括了Tomcat怎么实现异步Servlet的使用技巧和注意事项,需要的朋友参考一下 有时Servlet在生成响应报文前必须等待某些耗时的操作,比如在等待一个可用的JDBC连接或等待一个远程Web服务的响应。对于这种情况servlet规范中定义了异步处理方式,由于Servlet中等待阻塞会导致Web容器整体的处理能力低下,所以对于比较耗时的操作

  • 本文向大家介绍springboot实现异步调用@Async的示例,包括了springboot实现异步调用@Async的示例的使用技巧和注意事项,需要的朋友参考一下 在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是顺序执行(不考虑多线程并发的情况),但是顺序执行的效率肯定是无法达到我们的预期的,这时就期望可以并行执行,常规的做法是使用多线程或线程池,需要额外