爱看书的阿东

赐他一块白色石头,石头上写着新名

我的Neo4j探索之旅 - 安装Apoc插件以及JAVA集成(二)

上一篇文章:

不知道为什么掘金我发不出文章,找不到那里违规了,上一篇文章我发布到思否了:

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. 具体的安装步骤

  1. 下载好之后,放入到 D:\zxd\tool\neo4j-community-3.5.12-windows\neo4j-community-3.5.12\plugins 下面
  2. 执行neo4j stop,关闭neo4j 服务
  3. 进入 ~/conf 下面,找到neo4j.conf ~表示你的neo4j 安装位置
  4. 修改#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.*

  1. 输入 neo4j start 启动neo4j 服务
  2. 在可视化界面,输入return apoc.version() ,如果报错说明没安装对,显示如下页面,证明apoc 插件安装成功

Neo4j 集成到java里面

1. 配置maven,加入依赖

1
2
3
4
5
6
<!-- neo4j 依赖包 -->
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
<version>1.5.0</version>
</dependency>

2. 使用neo4j 集成java实战

这是之前实战的是用的方式,这里说下我大致的设计记录

需求:

  1. neo4j 实现插拔式配置,没有配置的情况下进行连接不会影响程序运行
  2. 所有的配置都需要放在application_setting.xml当中
  3. 如果连接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
	/**
* 构建neo4j url地址
* @return
*/
String buildUrl();

/**
* 构建neo4j 用户名
* @return
*/
String buildUsername();

/**
* 构建neo4j 密码
* @return
*/
String buildPassword();

/**
* 构建neo4j 配置, 目前使用默认 配置
* @return
*/
Config buildConfig();

/**
* 是否开启自定义配置
* @return
*/
boolean enableCustomConfig();

/**
* 构建 Neo4j csv同步地址的前置
* 默认为 file:///
*
* @return
*/
String buildCvsPrefix();

/**
* 构建 neo4j csv同步的普通标签文件名
* @return
*/
String buildNormalTagSyncFileName();

/**
* 构建 neo4j csv同步的业务标签文件名
* @return
*/
String buildBusinessTagSyncFileName();

/**
* 构建 neo4j csv同步的用户标签文件名
* @return
*/
String buildUserTagSyncFileName();

/**
* 普通标签和业务标签的关联csv文件名称
* @return
*/
String buildNormalTagBizSyncFileName();

/**
* 普通标签和用户标签的关联csv文件名称
* @return
*/
String buildNormalTagUserSyncFileName();

/**
* 业务标签和用户标签的关联csv文件名称
* @return
*/
String buildBizTagUserSyncFileName();

/**
* 主题分类(业务)标签子父关联csv文件名称
* @return
*/
String buildBizChildSyncFileName();

/**
* 普通标签标签子父关联csv文件名称
* TODO: 目前普通标签没有子父关联关系,后续需要拓展请开放此接口 by zhaoxudong
* @return
*/
// String buildNormalChildSyncFileName();

/**
* 用户标签的子父关联csv文件名称
* @return
*/
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 连接

  1. 根据上面两个步骤, ssm项目启动之后,会自动装载BEAN, 装载之后,只要在具体的程序里面,拿取配置即可(具体的配置获取实现可以由自己实现)
  2. 根据上面的方法使用java拿到xml配置之后,就实现了下面的方式实现neo4j 的数据连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 连接图数据库
* @return
*/
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
/**
* 执行添加cql
*
* @param cql 查询语句
*/
@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 我的很多前端疑难杂症就是靠这网站解决的

  • 本文作者: lazytime
  • 本文链接: https://whitestore.top/2020/11/03/note/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC 许可协议。转载请注明出处!