4.x 版本驱动程序更改
本节介绍 Neo4j 1.7 驱动程序和 Neo4j 4.x 驱动程序之间的差异。
高级更改
从 4.0 开始,驱动程序旨在为所有语言提供用户友好且统一的 API。
在早期版本的 Neo4j 中,客户端-服务器通信使用加密的本地连接,并开箱即用地生成自签名证书。但是,从 4.0 开始,默认设置为未加密。有关更多信息,请参阅 驱动程序手册→连接 URI。
Neo4j 4.0 引入了与 Reactive Streams 标准兼容的反应式 API。这使得能够对 Cypher® 查询结果的数据流进行细粒度的控制,包括能够暂停或取消中途执行。有关更多信息,请参阅 驱动程序手册→查询和结果。
当使用 4.x 驱动程序连接到 4.x 数据库时,可以处理多个数据库。从驱动程序 API 的角度来看,这意味着必须选择一个数据库用作会话中事务的执行上下文。这可以在会话构建时配置。如果未选择数据库,则驱动程序将连接到服务器的默认数据库。
1.7 版驱动程序可以与 Neo4j 4.x 兼容模式下工作。它们不支持 Neo4j 4.0 及更高版本中引入的功能,例如 多个数据库、Neo4j Fabric 和 细粒度访问控制。要在线并发运行多个数据库并在其上执行分布式查询,必须从 1.7 迁移到 4.x。 |
本章中的示例主要使用 Java 编写,使用 Java 驱动程序。但是,类似的代码可以翻译成其他语言。
新功能
-
从 Neo4j 4.0 开始,数据库、驱动程序和协议的版本控制方案都保持一致。对于受支持的驱动程序,这意味着版本号从 1.7 更改为任何 4.x 版本。
-
1.7+ 驱动程序与 4.x 服务器通信可能需要显式关闭加密。这是由于 Neo4j 3.x 和 4.x 之间的默认值发生了更改。
-
Bolt 4.0 在 4.x 驱动程序和 4.0 服务器中都已实现。
-
反应式 API 现在可用于 4.0 服务器。要使用反应式 API,起点是驱动程序对象上的
RxSession
。 -
使用 4.0 服务器,会话实例现在应针对特定数据库获取。因果链仍然在每个数据库中得到尊重(事务不能跨多个数据库)。驱动程序本身连接到 Neo4j 数据库管理系统。
-
添加了一种新的功能检测方法
driver.supportsMultiDb()
,用于查询远程数据库是否支持多个数据库。 -
引入了一种新的
driver.verifyConnectivity()
方法,用于连接验证目的。默认情况下,驱动程序实例在构建后不会验证数据库管理系统的可用性。 -
新的连接 URI 方案及其包含额外加密和信任信息的变体 -
neo4j+s
、bolt+s
、neo4j+ssc
和bolt+ssc
。+s
变体启用使用完整证书检查的加密,而+ssc
变体启用不进行证书检查的加密。后一种变体专门设计用于自签名证书。有关更多信息,请参阅 其他 URI 方案。
import org.neo4j.driver.Driver;
import org.neo4j.driver.Result;
import org.neo4j.driver.Session;
import org.neo4j.driver.SessionConfig;
import org.neo4j.driver.Values;
...
private final Driver driver;
...
public void printGreeting( final String message )
{
SessionConfig sessionConfig = driver.supportsMultiDb() ? SessionConfig.forDatabase( "neo4j" )
: SessionConfig.defaultConfig();
try ( Session session = driver.session( sessionConfig ) )
{
String greeting = session.writeTransaction( tx -> {
Result result = tx.run( "CREATE (a:Greeting) SET a.message = $message RETURN a.message + ', from node ' + id(a)",
Values.parameters( "message", message ) );
return result.single().get( 0 ).asString();
} );
System.out.println( greeting );
}
}