设置插件项目

您可以设置一个项目来使用用户定义过程扩展 Neo4j,构建该项目,并将该过程部署到 Neo4j 实例。同样的步骤也可用于用户定义函数。

本节中描述的示例可在 GitHub (neo4j-examples/neo4j-procedure-template) 上获取。

使用 Maven 设置项目

项目可以通过任何允许编译过程并生成 JAR 文件的方式进行设置。

以下是示例配置的主要部分,使用了Maven 构建系统。

Maven pom.xml 文件的摘录
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.neo4j.example</groupId>
  <artifactId>procedure-template</artifactId>
  <version>1.0.0-SNAPSHOT</version>

  <packaging>jar</packaging>
  <name>Neo4j Procedure Template</name>
  <description>A template project for building a Neo4j Procedure</description>

  <properties>
    <java.version>17</java.version>
    <maven.compiler.release>${java.version}</maven.compiler.release>

    <neo4j.version>2025.05.0</neo4j.version>
  </properties>

构建依赖

添加一个依赖项部分,其中包含过程和函数 API,这些是过程和函数在运行时使用的。

范围设置为 provided,因为一旦过程部署到 Neo4j 实例,该依赖项将由 Neo4j 提供。如果项目中添加了非 Neo4j 依赖项,它们的范围通常应为 compile

<dependency>
 <groupId>org.neo4j</groupId>
 <artifactId>neo4j</artifactId>
 <version>${neo4j.version}</version>
 <scope>provided</scope>
</dependency>

添加测试过程所需的依赖项。

Neo4j Harness,一个允许启动轻量级 Neo4j 实例的实用程序。它用于启动部署了特定过程或函数的 Neo4j,这极大地简化了测试。

Neo4j Java 驱动程序,用于发送调用过程或函数的 Cypher 语句。

JUnit,一个常见的 Java 测试框架。

<dependency>
 <groupId>org.neo4j.test</groupId>
 <artifactId>neo4j-harness</artifactId>
 <version>${neo4j.version}</version>
 <scope>test</scope>
</dependency>

<dependency>
 <groupId>org.neo4j.driver</groupId>
 <artifactId>neo4j-java-driver</artifactId>
 <version>5.28.5</version>
 <scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>

构建步骤

Maven 构建项目所要经历的步骤。

目标是首先编译源代码,然后将其打包成可部署到 Neo4j 实例的 JAR 文件。

Maven Shade 插件用于打包编译后的过程。它还会将所有依赖项包含在包中,除非依赖项范围设置为testprovided

一旦过程部署到每个 Neo4j 实例的 plugins 目录并重启实例后,该过程即可使用。

<build>
<plugins>
 <plugin>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
     <source>17</source>
     <target>17</target>
   </configuration>
 </plugin>
 <plugin>
   <artifactId>maven-shade-plugin</artifactId>
   <executions>
     <execution>
       <phase>package</phase>
       <goals>
         <goal>shade</goal>
       </goals>
     </execution>
   </executions>
 </plugin>
</plugins>
</build>

实现自定义种子提供程序

从 URI 播种功能提供了从类路径动态发现附加种子提供程序实现的能力。

种子提供程序应使用 Java 实现;本指南提供了如何使用 Maven 作为构建工具来完成此操作的说明。

设置 Maven 项目

包含此依赖项以针对 Neo4j 提供的 API 进行构建

<dependency>
   <groupId>com.neo4j</groupId>
   <artifactId>neo4j-dbms-api</artifactId>
   <version>${project.version}</version>
   <scope>compile</scope>
</dependency>

实现 Java 类

DatabaseSeedProvider

import com.neo4j.dbms.seeding.DatabaseSeedProvider;

public class CustomDatabaseSeedProvider implements DatabaseSeedProvider {

  @Override
	public boolean matches(String uri) {
   		// Return true if uri is supported by this
      // provider.
  }

  @Override
  public InputStream stream(
          String uri,
          Map<String, Object> options) throws IOException {
          // This method should obtain an input stream in an
          // implementation specific way.
  }

  @Override
  public void inject(Dependencies dependencies) {
      // This method should provide implementation
      // specific dependencies to the provider.
  }

  public static class CustomDependencies implements Dependencies {
        @Override
        public <T> T resolveDependency(Class<T> type) {
            // This method should resolve dependencies
            // required by the provider.
        }
    }
}

要实现自定义数据库种子提供程序,您必须在顶级 DatabaseSeedProvider 接口上定义三个方法

  • 一个匹配提供程序可管理 URI 的方法。

  • 一个从指定 URI 流式传输备份或转储的方法。

  • 一个在提供程序中注入依赖项的方法。

此外,您必须在嵌套的 Dependencies 接口上实现一个方法,以解析您的种子提供程序实现所需的任何依赖项。

通常,匹配方法使用 URI 方案(第一个冒号前指定的部分)来确定它是否支持给定的 URI。例如,filehttphttps 等。

流方法应实现一种方案特定方式,以获取备份或转储的输入流。

实现特定的种子配置可以通过使用 seedConfigCREATE DATABASE 命令中指定的选项进行传递。

请记住,CREATE DATABASE 命令是企业版功能。

部署

从 Maven 构建 JAR 文件并将其放置到 Neo4j 类路径上。

JAR 文件必须包含一个 META-INF 文件,以通过路径启用提供程序的发现

/META_INF/services/com.neo4j.dbms.seeding.SeedProvider

它应该是一个纯文本文件,JAR 文件中包含的每个提供程序占一行,该行应包含提供程序类的完全限定名。

如果您需要自定义种子提供程序的帮助,请联系专业服务。

© . All rights reserved.