在我编写的应用程序中,我在每个节点和关系上手动设置了一个createdAt
和一个updatedAt
字段。这意味着我可以定期检查应用程序的其他用户是否添加了任何新内容。
但是,不同的应用程序(如Neo4j浏览器)在同一数据库中编辑的任何元素可能不会设置这些字段,因此我的应用程序将保持不知道这些更改。
是否可以配置Neo4j,以便来自任何源的任何修改都将updatedAt字段设置为当前服务器时间?
我已经阅读了beforeCommit
事务事件,这似乎是一个很好的线索,但看起来好像我需要在某个地方编写一些Java代码。你能举个例子说明怎么做吗?
你应该看看graphhaware改进的事务事件API。它为处理事件提供了更好的API。
使用这个(或使用默认功能),您可以创建TransactionEventHandler
(即TimestampUpdater
)为您做的工作。
要向Neo4j服务器添加所需的功能,您应该创建非托管扩展。这将允许您使用自定义功能丰富Neo4j服务器。
您应该可以按照官方Neo4j文档的说明创建基本的非托管扩展。
还有一个由Neo4j贡献者- Neo4j -tx-participation开发的非托管扩展示例。它非常简单,可以很好地概述如何做到这一点。
这里可以找到关于如何在非托管扩展初始化(数据库启动)上向Neo4j添加某些东西的答案。它概述了如何使用PluginLifecycle
。
当您拥有非托管扩展和TimestampUpdater
事件处理程序时,您可以将它们组合在一起。
在PluginLifecycle
中注册处理程序:
public class ExtensionPluginLifecycle implements PluginLifecycle {
@Override
public Collection<Injectable<?>> start(GraphDatabaseService graphDatabaseService,
Configuration config) {
graphDatabaseService.registerTransactionEventHandler(new TimestampUpdater());
}
@Override
public void stop() {
}
}
祝你好运!