从旧版本或其他 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
— 使用适当的传输方案(neo4j
、neo4j+s
或neo4j+ssc
) -
autocommit
— 使用java.sql.Connection.setAutoCommit
连接池可通过任何符合 JDBC 规范的连接池实现。以下属性无效:
-
max.connection.lifetime
-
max.connection.poolsize
以下属性只是名称不同:
-
connection.acquisition.timeout
是timeout
(作为 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 驱动程序支持复杂对象类型作为返回类型。