从旧版本或其他 Neo4j JDBC 驱动程序迁移

Neo4j 有其他一些 JDBC 驱动程序,它们具有不同的许可和不同的特性与功能。在下文中,我们将概述可能的迁移过程。所有 Neo4j JDBC 驱动程序的基本使用模式都非常相似:最终,“仅仅”是使用一个符合 JDBC 规范的驱动程序,您将按照原始的 关于 JDBC 的 Java 教程中所述使用它。

从该驱动程序的版本4或5迁移

Neo4j JDBC 驱动程序的版本 5 和 4 主要由 Larus BA, Italy 开发,该公司是 Neo4j 的认证咨询和集成解决方案合作伙伴。

您需要进行的最重要更改是删除对 org.neo4j:neo4j-jdbc-bolt 的依赖。您需要将其替换为 org.neo4j:neo4j-jdbc 或我们提供的其中一个捆绑包,详见 可用捆绑包

URL 格式、参数和主驱动程序类

以前的版本将通用 Java 驱动程序的 URL 映射到 jdbc:,例如,使用 jdbc:neo4j:neo4j+s://foobar.io:7687/ 连接到在主机 foobar.io 的 7687 端口上运行的数据库。

以下 URL(直接 bolt 连接)不受支持:

  • jdbc:neo4j:bolt://<host>:<port>/

  • jdbc:neo4j:bolt+s://<host>:<port>/

  • jdbc:neo4j:bolt+ssc://<host>:<port>/

以下 URL 行为相同但必须重写:

  • jdbc:neo4j:neo4j://<host>:<port>/ 变为 jdbc:neo4j://<host>:<port>/

  • jdbc:neo4j:neo4j+s://<host>:<port>/ 变为 jdbc:neo4j+s://<host>:<port>/

  • jdbc:neo4j:neo4j+ssc://<host>:<port>/ 变为 jdbc:neo4j+ssc://<host>:<port>/

以下配置属性受支持,且没有替代品:

  • leaked.sessions.logging

  • readonly

  • usebookmarks

  • max.transaction.retry.time(此驱动程序没有内置重试机制)

与任何持久数据库连接一样,您需要处理失败的事务。我们对 resilience4j 有很好的经验,它与常见的 Java 框架(如 Spring Boot)很好地契合。

以下属性可通过标准化的 JDBC 设置实现:

  • encryption — 使用适当的传输方案(neo4jneo4j+sneo4j+ssc

  • autocommit — 使用 java.sql.Connection.setAutoCommit

连接池可通过任何符合 JDBC 规范的连接池实现。以下属性无效:

  • max.connection.lifetime

  • max.connection.poolsize

以下属性只是名称不同:

  • connection.acquisition.timeouttimeout(作为 URL 的查询参数或在配置属性中)

以下属性可以通过使用不同的 URL 来实现:

  • database 现在是 URL 的一部分:您不再需要指定 jdbc:neo4j:neo4j+s://foobar.io:7687?database=abc,而是将数据库名称作为 URL 中的路径段使用,例如:jdbc:neo4j+s://foobar.io:7687/abc

如果您的工具需要使用具体的驱动程序类,此 JDBC 驱动程序只有 org.neo4j.jdbc.Neo4jDriver。如果您依赖于 javax.sql.DataSource,我们提供了 org.neo4j.jdbc.Neo4jDataSource

扁平化

虽然 Neo4j JDBC 驱动程序不支持 flatten 选项,但它可以模拟其效果。 flatten 通过将所有属性作为单独的列提供,来解嵌套返回的节点和关系。

如果您启用自动 SQL 到 Cypher® 转换,任何 *-选择都将检查它是否影响节点或关系,并将解嵌套其属性,因此 SELECT * FROM Movie m 实际上将变为 MATCH (m:Movie) RETURN m.title AS title, m.released AS released。欲了解更多信息,请参阅 星号选择

如果您想访问实际节点,请返回整个表别名或直接使用 Cypher。

Neo4j JDBC 驱动程序支持复杂对象类型作为返回类型。

© . All rights reserved.