设置插件项目

您可以设置一个用于使用用户定义的过程扩展 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>5.25.1</neo4j.version>
  </properties>

构建依赖项

添加一个依赖项部分,其中包括过程和函数 API,过程和函数在运行时使用这些 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.26.1</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 类

import com.neo4j.dbms.seeding.ParsedSeedProviderConfig;
import com.neo4j.dbms.seeding.SeedProvider;

public class CustomSeedProvider extends SeedProvider {

	public boolean matches(String uri) {
   		// return true if uri is supported by this
      // provider
  }

public Path download(
     	String uri,
      Optional<String> credentials,
      Optional<String> config,
      Path destinationFolder ) throws Exception {
      // This method should obtain the downloaded in an
      // implementation specific way and copy it to a
      // file within the destinationFolder directory.
  }
}

要实现自定义种子提供程序,您必须实现两种方法。一种方法是匹配它可以管理的 URI,另一种方法是从给定的 URI 下载备份或转储。

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

下载方法应实现一种特定于方案的方法来获取备份或转储,并将其放置到提供的目标文件夹中的文件中。然后,它应该返回已创建文件的路径。

凭据和配置都通过在 CREATE DATABASE 命令中指定的选项传递。ParsedSeedProviderConfig 提供了一种方便的方法来解析和访问逗号分隔的配置字符串。

部署

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

jar 必须包含一个 META-INF 文件,以便使用路径发现提供程序

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

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

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