设置插件项目
您可以设置一个项目来使用用户定义过程扩展 Neo4j,构建该项目,并将该过程部署到 Neo4j 实例。同样的步骤也可用于用户定义函数。
本节中描述的示例可在 GitHub (neo4j-examples/neo4j-procedure-template) 上获取。 |
使用 Maven 设置项目
项目可以通过任何允许编译过程并生成 JAR 文件的方式进行设置。
<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 插件用于打包编译后的过程。它还会将所有依赖项包含在包中,除非依赖项范围设置为test或provided。
一旦过程部署到每个 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。例如,file
、http
、https
等。
流方法应实现一种方案特定方式,以获取备份或转储的输入流。
实现特定的种子配置可以通过使用 seedConfig
在 CREATE DATABASE
命令中指定的选项进行传递。
请记住,CREATE DATABASE
命令是企业版功能。