跳至内容

Neo4j 配置#

支持的 URI#

liquibase-neo4j 仅接受 JDBC 格式的 URI。

仅支持通过 Bolt 协议变体的连接。扩展程序不支持通过 HTTP 或嵌入式连接。

  • ✅ 支持 jdbc:neo4j:bolt://host:port
  • ✅ 支持 jdbc:neo4j:bolt+s://host:port
  • ✅ 支持 jdbc:neo4j:bolt+ssc://host:port
  • ✅ 支持 jdbc:neo4j:neo4j://host:port
  • ✅ 支持 jdbc:neo4j:neo4j+s://host:port
  • ✅ 支持 jdbc:neo4j:neo4j+ssc://host:port
  • ❌ 不支持 jdbc:neo4j:http://host:port
  • ❌ 不支持 jdbc:neo4j:https://host:port
  • ❌ 不支持 jdbc:neo4j:file:///path/to/neo4j

Neo4j 驱动程序手册 中阅读有关每个 URI 方案的更多信息。

JDBC 连接#

对于 4.18.0.1 及更早版本,Neo4j 扩展依赖于 第三方 JDBC 连接器。此连接器的配置参数可以在 此链接 中找到。

从 4.19.0 版本开始,扩展定义了自己的内置 JDBC 连接器。

内置连接器更简单,也更容易理解,因为 Liquibase 只需要一个连接来执行一次操作,并依赖于一组特定的、有限的 JDBC API。

此新连接器与第三方连接器有一些关键区别。

内置连接器的序列化和反序列化逻辑更加严格。

警告

如果您尝试将第三方连接器与最新版本的扩展一起使用,可能会出现 此问题

由于它仅针对 Liquibase 使用量身定制,因此新连接器不会通过标准 JDBC 机制注册。

import java.sql.Connection;
import java.sql.DriverManager;
// [...]
Connection connection = DriverManager.getConnection("jdbc:neo4j:neo4j://localhost", "neo4j", "<redacted>");
// this will not work! see below

如果您需要访问 JDBC Connection 实例以编程方式配置 Liquibase,则需要运行以下代码

import liquibase.ext.neo4j.database.jdbc.Neo4jDriver;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
// [...]
Properties properties = new Properties();
properties.setProperty("user", "neo4j");
properties.setProperty("password", "<redacted>");
Connection connection = new Neo4jDriver().connect(
    "jdbc:neo4j:neo4j://localhost",
    properties
);
spring.liquibase.driver-class-name=liquibase.ext.neo4j.database.jdbc.Neo4jDriver
spring.liquibase.url=jdbc:neo4j:bolt://localhost
spring.liquibase.user=neo4j
spring.liquibase.password=<redacted>
import javax.sql.DataSource;
import liquibase.ext.neo4j.database.jdbc.Neo4jDriver;
import org.springframework.boot.autoconfigure.liquibase.LiquibaseDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
// [...]

@LiquibaseDataSource
@Bean
public DataSource liquibaseNeo4jDataSource() {
    // SimpleDriverDataSource is a great fit for Liquibase
    // since it does not need any connection pooling
    // note: you can set properties instead of hardcoding credentials
    SimpleDriverDataSource dataSource = new SimpleDriverDataSource(
        new Neo4jDriver(),
        "jdbc:neo4j:bolt://localhost"
    );
    dataSource.setUsername("neo4j");
    dataSource.setPassword("<redacted>");
    return dataSource;
}

配置#

您可以通过配置以下任何设置来微调 JDBC 驱动程序或底层 Java Bolt 驱动程序的行为。

重要

第三方 JDBC 连接器支持的一些设置尚未得到支持。如果您碰巧需要其中之一,请 打开一个问题 并说明在您的情况下为什么需要它。

设置 描述 允许的值 URL? 属性? 备注
database 设置数据库名称 任何有效的数据库名称 此设置仅适用于 Neo4j 4+ 服务器
nossl 禁用加密 - [空]
- "true"
"false" 无效。
将此设置与 encryption 或与不兼容的 URI 方案一起使用是未指定的。
改为使用合适的 URL 方案(boltneo4j
encryption 设置是否应加密流量 - [空]
- "true"
- "false"
将此设置与 nossl 一起使用是未指定的。改为使用合适的 URL 方案
trust.strategy 配置底层 驱动程序 如何处理证书 - "TRUST_ALL_CERTIFICATES"
- "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES"
- "TRUST_SYSTEM_CA_SIGNED_CERTIFICATES"
"TRUST_CUSTOM_CA_SIGNED_CERTIFICATES" 需要设置 "trusted.certificate.file"
trusted.certificate.file 自定义证书文件名 有效的路径 仅与 "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES" 信任策略结合使用
connection.acquisition.timeout 设置完整连接池获取连接所需的最长时间 任何整数值 该值为毫秒。
connection.liveness.check.timeout 设置在再次获取空闲连接之前测试其活动性的阈值 任何整数值 该值为分钟。
connection.timeout 设置套接字连接超时 任何正整数值
leaked.sessions.logging 启用泄漏会话日志记录(即未正确关闭的会话,泄漏底层连接导致 OOM - [空]
- "true"
"false" 无效
max.connection.lifetime 设置连接不再被获取的阈值 任何整数值 该值为毫秒
max.connection.poolsize 设置底层 驱动程序 连接池的最大大小 任何整数值 扩展现在将驱动程序的默认池大小覆盖为 1(自 4.22.0.1 起)
max.transaction.retry.time 设置事务可以重试的最大时间 任何正整数值 该值为毫秒。
此设置当前无效,因为专用 JDBC 连接器不依赖于事务函数
fetch.size 设置要获取的每个批次的记录数 -1 或任何严格的正整数值 此设置仅适用于 Neo4j 4+ 服务器
-1 禁用批处理(并可能导致内存问题,谨慎使用)
impersonated.user 设置要模拟的用户名 任何有效的用户名 此设置仅适用于 Neo4j 4.4+ 服务器
driver.logging.console.level 按名称或数值设置 java.util.logging.Level 并将驱动程序日志重定向到标准错误输出流 任何有效的级别名称或数值 此设置自版本 4.22.0.1 起可用
driver.logging.jul.level 设置内置 Java Util Logging 系统使用的 java.util.logging.Level,按名称或数值表示 任何有效的级别名称或数值 此设置自版本 4.22.0.1 起可用
driver.logging.slf4j 将驱动程序日志记录设置为 SLF4J - [空]
- "true"
此设置自版本 4.22.0.1 起可用
driver.logging.none 禁用驱动程序日志记录 - [空]
- "true"
此设置自版本 4.22.0.1 起可用

重要

  • 设置名称规范化为小写(根据英文区域设置的大小写规则)。
  • 如果通过 URL 和属性都表达了一个设置,则通过 URL 指定的设置具有更高的优先级。
  • 没有值的 URL 设置被视为等效于值为 true 的布尔标志。