bboyjing's blog

Neo4j学习笔记十【Spring Data Neo4j--Embedded Driver】

前面一章我们使用Spring Data以Http的形式访问Neo4j,但是发现用不了内置的强大Api。在SDN官方文档中发现有embedded-driver。下面我们尝试着使用下该驱动。

搭建环境(基于上一章的项目)

1、添加embedded-driver依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<properties>
...
<ogm-version>2.0.3</ogm-version>
<neo4j.version>3.1.0-M03</neo4j.version>
...
</properties>
<dependencies>
...
<!-- embedded-driver里依赖的Neo4j版本时2.x的,需要升级 -->
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-embedded-driver</artifactId>
<version>${ogm-version}</version>
<exclusions>
<exclusion>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
</exclusion>
</exclusions>
</dependency>
...
</dependencies>

2、修改Neo4jConfig

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//添加嵌入式连接Configuration,并注释掉之前的Remote Configuration
@Bean
public org.neo4j.ogm.config.Configuration getEmbeddedConfiguration(){
org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration();
config.driverConfiguration()
.setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver")
.setURI("file:///opt/neo4j-community-3.0.3/data/databases/graph.db");
return config;
}
//将getConfiguration()修改成getEmbeddedConfiguration()
@Override
public SessionFactory getSessionFactory() {
/**
* 如果不指定节点映射的java bean路径,保存时会报如下警告,导致无法将节点插入Neo4j中
* ... is not an instance of a persistable class
*/
return new SessionFactory(getEmbeddedConfiguration(), "cn.didadu.sdn.entity");
}

其实,只是改下DriverClassName和URI,就把Remote模式改成Embedded模式了,跑一下testGetUserByName(),程序正常运行。但是,就算改成Embedded,依然还是用的Spring Data的模板,GraphDatabaseService在哪里?下面我们就把GraphDatabaseService找出来。

3、再次修改Neo4jConfig

1
2
3
4
5
6
//暴露GraphDatabaseService
@Bean
public GraphDatabaseService graphDatabaseService(){
EmbeddedDriver embeddedDriver = (EmbeddedDriver) Components.driver();
return embeddedDriver.getGraphDatabaseService();
}

4、修改UserService类

1
2
3
4
5
6
7
8
//注入GraphDatabaseService
@Autowired
private GraphDatabaseService graphDatabaseService;
@Transactional
public Node getUserById(Long id){
return graphDatabaseService.getNodeById(id);
}

5、修改测试类UserServiceTest

1
2
3
4
5
@Test
public void testGetUserById(){
Node node = userService.getUserById(89l);
System.out.println(node);
}

至此,Spring Data Neo4j的相关内容算了解过了,下面把示例项目改造下,分成Remote和Embedded两个项目,并且把之前的例子都整合到Embedded项目中,具体过程就不贴出来了,给出Github链接