如何生成JQAssistant扫描创建的Neo4j数据库转储?SSL问题求解
解决JQAssistant生成Neo4j数据库转储的问题
针对你遇到的两种困境(集成服务器无Shell、本地Neo4j连接SSL握手失败),结合你使用的版本(Neo4j 3.5.15 + JQAssistant 1.9),我整理了几个可行的解决方案:
方案1:修复本地Neo4j连接的SSL握手错误
你遇到的javax.net.ssl.SSLHandshakeException是因为JQAssistant的Neo4j客户端(3.5.14)和本地Neo4j服务器(3.5.15)的SSL配置不匹配,有两种修复方式:
方式A:临时关闭Neo4j的SSL(仅测试环境使用)
- 打开Neo4j安装目录下的
conf/neo4j.conf文件 - 找到并修改配置项:
dbms.ssl.enabled=false - 重启Neo4j服务器
- 重新执行扫描命令(无需SSL,直接用
bolt://协议):jqassistant.sh scan -f my-project.jar -storeUri bolt://localhost:7687 -storeUsername neo4j -storePassword secret - 扫描完成后,用Neo4j自带工具生成转储:
neo4j-admin dump --database=graph.db --to=./my-jqassistant-dump.dump注意:JQAssistant默认使用的数据库名是
graph.db,需对应指定
方式B:配置JQAssistant信任Neo4j的SSL证书(生产环境推荐)
- 确认Neo4j的SSL端口(3.5版本默认SSL Bolt端口是
7688) - 找到Neo4j生成的信任证书,通常在
certificates/neo4j.truststore路径下 - 执行扫描命令时,添加JVM参数指定信任存储:
jqassistant.sh \ -Djavax.net.ssl.trustStore=/path/to/neo4j/certificates/neo4j.truststore \ -Djavax.net.ssl.trustStorePassword=your-truststore-password \ scan -f my-project.jar \ -storeUri bolt+s://localhost:7688 \ -storeUsername neo4j \ -storePassword secret提示:Neo4j默认信任存储密码是
neo4j,首次启动会要求修改
方案2:直接用JQAssistant本地存储生成转储(无需连接外部Neo4j)
这个方案绕开外部Neo4j连接问题,直接让JQAssistant把扫描结果存储到本地文件,再用Neo4j工具转储:
- 执行扫描命令,指定本地存储目录(替代
-storeUri):
执行完成后,jqassistant.sh scan -f my-project.jar -storeDirectory ./jqassistant-local-db./jqassistant-local-db目录下会生成完整的Neo4j数据库文件 - 使用JQAssistant内置的Neo4j工具(版本3.5.14,避免版本兼容问题)生成转储:
找到JQAssistant安装目录下的neo4j/bin/neo4j-admin,执行:./neo4j-admin dump --database=graph.db --to=./my-jqassistant-dump.dump --dir=../data/databases注意:
--dir参数要指向JQAssistant本地存储目录下的databases子目录(即./jqassistant-local-db/databases)
方案3:针对无Shell的集成服务器场景
如果你的集成服务器无法访问Shell,可以通过JQAssistant的Java API实现扫描+转储的自动化:
- 在项目中引入JQAssistant核心依赖(Maven示例):
<dependency> <groupId>com.buschmais.jqassistant.core</groupId> <artifactId>store-neo4j3</artifactId> <version>1.9.0</version> </dependency> - 编写代码执行扫描并生成转储:
import com.buschmais.jqassistant.core.store.impl.neo4j3.Neo4j3Store; import org.neo4j.backup.BackupService; import org.neo4j.backup.BackupServiceFactory; import java.io.File; public class JQAssistantDumpGenerator { public static void main(String[] args) throws Exception { // 创建本地存储 File storeDir = new File("./jqassistant-integrated-db"); try (Neo4j3Store store = new Neo4j3Store(storeDir)) { store.connect(); // 执行扫描(以扫描JAR为例,可按需调整) store.scan(new File("my-project.jar"), null); // 生成数据库转储 BackupService backupService = BackupServiceFactory.backupService(); backupService.backup(new File("./integrated-jqassistant-dump.dump"), store.getGraphDatabaseService()); } } } - 将这段代码打包成可执行JAR,在集成服务器上运行即可生成转储文件
内容的提问来源于stack exchange,提问作者Norwort
相关产品推荐
相关产品推荐

