如何 Monitor/inspect data/attribute 流入 Java 代码

How to Monitor/inspect data/attribute flow in Java code

我有一个用例,需要捕获从一个 API 到另一个的数据流。例如,我的代码使用 hibernate 从数据库中读取数据,在数据处理期间,我将一个 POJO 转换为另一个并执行更多处理,然后最终转换为最终结果 hibernate 对象。简而言之,类似于 POJO1POJO2POJO3

在 Java 中,有没有一种方法可以让我从 POJO3 的属性中推断出 POJO1 的属性 made/transformed。我想看看可以捕获从一个模型到另一个模型的数据流的东西。这个工具可以是编译时,也可以是运行时,我都可以。

我正在寻找一种可以 运行 与代码并行并在每个 运行 基础上提供数据沿袭详细信息的工具。

现在我将它们称为状态,而不是 Pojos!您有一个开始位置,您可以通过不同的状态迭代和转换您的模型。最后,您有一个最终的终端状态,您希望将其持久保存到数据库

stream(A).map(P1).map(P2).map(P3)....-> set of B

如果您使用称为事件溯源的技术,您可以推断出是的。这会是什么样子呢?不是直接将 A 映射到状态 P1 并将状态 P1 映射到状态 P2,而是将所有必要且足以将 A 映射到 P1 并将 P1 映射到 P2 等等的操作排队......如果您想随时恢复 P1 或 P2时间,它将只是排队操作的产物。只要您尚未更改数据库状态,您就可以随时向前或向后倒带。 P1,P2,P3可以作为快照。

这样您就可以为该属性重建准确的映射流程。您将对操作进行多细粒度的排队,是否与属性级别一样精细,或者更细粒度取决于您。

这是一篇描述事件溯源及其工作原理的好文章:https://kickstarter.engineering/event-sourcing-made-simple-4a2625113224

更新:

我能想到一种捕捉属性变化的技术。您可以安装您的 Pojo-s,它与 Hibernate 用于增强 Pojos 的技术几乎相同,并且相同的技术配置文件用于跟踪。然后您可以捕获并响应 Pojo1、Pojo2、Pojo3 上的每个 setter 调用。不确定我是否会那样做....

如果https://www.cs.helsinki.fi/u/pohjalai/k05/okk/seminar/Aarniala-instrumenting.pdf

,这里有一些关于字节码检测的详细读物

我想有两个原因,要么代码不是您开发的,因此您想了解数据流以及将输入转换为输出的组合,要么您的代码以您不期望的方式运行. 我认为您需要将所有 pojo、输入和输出的值记录到您以后可以检查每个 运行 的任何地方。 示例:一个数据库 table 如果您可能需要在数百 运行 之后,但如果它的一次可能是以适当的形式记录到一个日志中。然后您需要自己手动逐层使用这些数据值来映射到下一层。我认为代码的可用性会很容易。如果您有不同的需求,请。解释一下。

如果您感谢我帮助我的想法和经验,请接受并点赞。

有"time travelling debuggers"个。对于 Java,快速搜索只显示了这一点: Chronon Time Traveling Debugger,查看this screencast它如何帮助您。

由于您的转换可能使用 setter 和 getter,此工具可能也很有趣:Flow

编写您自己的 java 代理来跟踪这可能不是您想要的。您或许可以使用 AspectJ to add some stack trace logging to getters and setters. See here 进行快速介绍。