专业的编程技术博客社区

网站首页 > 博客文章 正文

Springboot 2.x 使用bolt驱动集成neo4j

baijin 2024-11-24 11:54:18 博客文章 2 ℃ 0 评论

前言

最近项目需要引入neo4j,来显示一些关系图谱.就研究了下springboot 2.x引入neo4j的资料。网上的资料基本都是用spring data来集成.而且采用http驱动模式连接.导致性能不符合我的项目要求,出现查询过慢,以及内存飙高等问题。我只好放弃这种模式,而改用bolt高性能驱动,但是这个模式资料非常少,踩了不少坑。下面是我总结的一些经验。

正文

引入Maven依赖

<!--neo4J 依赖-->

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>

<!---弃用http驱动-->

<!-- <dependency>-->

<!-- <groupId>org.neo4j</groupId>-->

<!-- <artifactId>neo4j-ogm-http-driver</artifactId>-->

<!-- </dependency>-->

<dependency>
       <groupId>org.neo4j</groupId>
       <artifactId>neo4j-ogm-bolt-driver</artifactId>
       <version>3.2.20</version>
</dependency>

<dependency>
      <groupId>org.neo4j</groupId>
      <artifactId>neo4j-ogm-core</artifactId>
      <version>3.2.20</version>
</dependency>

<dependency>
      <groupId>org.neo4j</groupId>
      <artifactId>neo4j-ogm-api</artifactId>
      <version>3.2.20</version>
</dependency>

备注:后面两个依赖没有的话,java8连接neo4j 4.0版本以上会报错。

增加application.yaml配置

spring:
  data:
    neo4j:
      uri: bolt://xx.xxx.xxx:7687
      username: neo4j
      password: 密码

增加neo4j的Neo4jConfig的配置类

import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.Driver;
import org.neo4j.driver.GraphDatabase;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author: linwl
 * @Description:
 */
@Configuration
public class Neo4jConfig {

    @Value("${spring.data.neo4j.uri}")
    private String uri;

    @Value("${spring.data.neo4j.username}")
    private String username;

    @Value("${spring.data.neo4j.password}")
    private String password;

    /**
     * 图数据库驱动模式
     *
     * @return
     */
    @Bean
    public Driver neo4jDriver() {
        return GraphDatabase.driver(uri, AuthTokens.basic(username, password));
    }

}

编写简单的驱动模式使用基类

import com.zy.supplier.graph.job.impl.web.controller.BaseController;
import org.neo4j.driver.Driver;
import org.neo4j.driver.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @Author: linwl
 * @Description: neo4j驱动模式基类
 * @Date: 2021/2/21
 */
@Service
public class BaseNeo4jService {


    protected Logger log = LoggerFactory.getLogger(BaseNeo4jService .class);

    @Resource
    protected Driver driver;


    /**
     * 根据 员工id获取员工信息
     *
     * @param gid
     * @return
     */
    public SupMemberEntity findSupMember(String gid) {
        try (Session session = driver.session()) {
            String cql = "MATCH (n:SupMember {gid:$gid}) return n";
            log.info("start run cql:{},parameters:{}", cql, gid);
            Result result = session.run(cql,
                    parameters(GraphConsts.GID, gid));
            if (result.hasNext()) {
                Node node = result.single().get("n").asNode();
                return GraphTools.convertEntity(node, SupMemberEntity.class);
            }
            return null;
        }
    }
}

这样就可以实现对neo4j的自由拼接cql执行。

由于加了spring-boot-starter-data-neo4j的依赖,同时也支持spring data方式的使用,复杂cql就用驱动模式,简单的使用spring data。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表