上一篇文章:
不知道为什么掘金我发不出文章,找不到那里违规了,上一篇文章我发布到思否了:
https://segmentfault.com/a/1190000037690548
如何安装neo4j - apoc 插件
有英语阅读能力建议参考官方文档:https://neo4j.com/developer/neo4j-apoc/
1. 下载neo4j - apoc 插件
进入github : https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases
找到和当前neo4j 匹配的版本, 我选择3.5.0.12 的版本
这里提供我的:
链接:https://pan.baidu.com/s/1Tb7f-bYjwVZhfQtGfMr2Gw
提取码:bzwh
2. 具体的安装步骤
- 下载好之后,放入到
D:\zxd\tool\neo4j-community-3.5.12-windows\neo4j-community-3.5.12\plugins
下面
- 执行
neo4j stop
,关闭neo4j 服务
- 进入 ~/conf 下面,找到
neo4j.conf
~表示你的neo4j 安装位置
- 修改
#dbms.security.procedures.whitelist=apoc.coll.*,apoc.load.*
在这一行的下面增加dbms.security.procedures.unrestricted=apoc.*
的配置,安装apoc插件
下面的图看起来就像这样:
#dbms.security.procedures.whitelist=apoc.coll.,apoc.load.
dbms.security.procedures.unrestricted=apoc.*
- 输入
neo4j start
启动neo4j 服务
- 在可视化界面,输入
return apoc.version()
,如果报错说明没安装对,显示如下页面,证明apoc 插件安装成功
Neo4j 集成到java里面
1. 配置maven,加入依赖
1 2 3 4 5 6
| <dependency> <groupId>org.neo4j.driver</groupId> <artifactId>neo4j-java-driver</artifactId> <version>1.5.0</version> </dependency>
|
2. 使用neo4j 集成java实战
这是之前实战的是用的方式,这里说下我大致的设计记录
需求:
- neo4j 实现插拔式配置,没有配置的情况下进行连接不会影响程序运行
- 所有的配置都需要放在
application_setting.xml
当中
- 如果连接neo4j 失败,不做处理
抽象接口
在core
包里面, 设计公用开放接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
String buildUrl();
String buildUsername();
String buildPassword();
Config buildConfig();
boolean enableCustomConfig();
String buildCvsPrefix();
String buildNormalTagSyncFileName();
String buildBusinessTagSyncFileName();
String buildUserTagSyncFileName();
String buildNormalTagBizSyncFileName();
String buildNormalTagUserSyncFileName();
String buildBizTagUserSyncFileName();
String buildBizChildSyncFileName();
String buildUserChildSyncFileName();
|
具体实现
maven的其他项目工程,只要实现了上面的接口,就可以根据自己的设定去设置如何读取配置,下面给出案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| @Override public String buildUrl() { return Setter.getString("neo4j.address"); }
@Override public String buildUsername() { return Setter.getString("neo4j.username"); }
@Override public String buildPassword() { return Setter.getString("neo4j.password"); }
@Override public Config buildConfig() { return Config.defaultConfig(); }
@Override public boolean enableCustomConfig() { return Setter.getBoolean("neo4j.enablecustomconfig"); }
@Override public String buildCvsPrefix() { return Setter.getString("neo4j.datasyncprefix"); }
@Override public String buildNormalTagSyncFileName() { return Setter.getString("neo4j.normaltagsyncfilename"); }
@Override public String buildBusinessTagSyncFileName() { return Setter.getString("neo4j.businesstagsyncfilename"); }
@Override public String buildUserTagSyncFileName() { return Setter.getString("neo4j.usertagsyncfilename"); }
@Override public String buildNormalTagBizSyncFileName() { return Setter.getString("neo4j.normalbizsyncfilename"); }
@Override public String buildNormalTagUserSyncFileName() { return Setter.getString("neo4j.normalusersyncfilename"); }
@Override public String buildBizTagUserSyncFileName() { return Setter.getString("neo4j.bizusersyncfilename"); }
@Override public String buildBizChildSyncFileName() { return Setter.getString("neo4j.bizrelsyncfilename"); }
@Override public String buildUserChildSyncFileName() { return Setter.getString("neo4j.userrelsyncfilename"); }
|
结合到neo4j 连接
- 根据上面两个步骤, ssm项目启动之后,会自动装载BEAN, 装载之后,只要在具体的程序里面,拿取配置即可(具体的配置获取实现可以由自己实现)
- 根据上面的方法使用java拿到xml配置之后,就实现了下面的方式实现neo4j 的数据连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
private void createDriver(Neo4jConfigBuilder builder) { if(driver == null){ try{ driver = GraphDatabase.driver(builder.buildUrl(), AuthTokens.basic(builder.buildUsername(), builder.buildPassword())); }catch(Exception e){ driver = null; LOGGER.debug("无法建立图数据库连接,请检查图Neo4j 服务是否启动"); throw new RuntimeException("无法建立图数据库连接,请检查图Neo4j 服务是否启动"); } } }
|
具体开发
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
@Override public StatementResult run(Neo4jConfigBuilder builder,String cql) { createDriver(builder); Session session = driver.session(); StatementResult run = null; try { run = session.run(cql); }catch (Exception e){ e.printStackTrace(); } finally { if(session!=null){ session.close(); } } return run; }
@Override public StatementResult run(Neo4jConfigBuilder builder,String cql, Object... objects) { createDriver(builder); Session session = driver.session(); StatementResult run = null; try { run = session.run(cql, Values.parameters(objects)); }catch (Exception e){ e.printStackTrace(); } finally { if(session!=null){ session.close(); } } return run; }
|
曾经开发的时候查找的一些博客记录:
NEO4J的安装配置及使用总结
neo4j︱neo4j批量导入neo4j-import (五)
neo4j - 查询效率的几种优化思路
Neo4j如何对大量数据(千万节点及以上)进行初始化
关于Neo4j和Cypher批量更新和批量插入优化的5个建议
Neo4j的查询速度为何这么慢?这能商用吗?
Neo4j清空所有数据
Neo4j安装APOC和图算法Neo.ClientError.Procedure.ProcedureRegistrationFailed?
官方网站对于Apoc插件的介绍
neo4j cypher 语言的语法(非常非常重要):
neo4j–Cypher语法练习(START、CREATE、MERGE)
Neo4j中使用Cypher进行大批量节点删除的优化
thinbug 我的很多前端疑难杂症就是靠这网站解决的