neo4j自动关闭连接

复制代码
class CypherExecutor implements AutoCloseable {

    private final Driver driver;

    public CypherExecutor(String uri, String username, String password) {
        this.driver = GraphDatabase.driver(uri, AuthTokens.basic(username, password))
    }

    public <T> List<T> readCyphers(String cypher, Function<Record, T> mapper) {
        try (Session session = driver.session()) {
            Result result = session.run(cypher);
            return result.list(mapper);
        }
    }

    @Override
    public void close() throws Exception {
        driver.close();
    }
}
复制代码

 

 

复制代码
public class Neo4jSession implements Closeable {



    @Autowired
    private Driver driver;

    /**
     * 查询遇到异常时进行重试,最多重试三次
     *
     * @param cql
     * @return
     */
    public List<Record> run(String cql) {
        Result result = null;
        boolean isAvailable;
        int count = 0;
        try (Session session = driver.session()) {
            do {
                try {
                    result = session.run(cql);
                    isAvailable = true;
                } catch (ServiceUnavailableException e) {
                    isAvailable = false;
                    count++;
                    log.error(e.getMessage());
                }
                //失败重试最多3次,避免陷入死循环!
                if (count == 3) {
                    break;
                }
            } while (!isAvailable);
            //返回result必须在session关闭之前,否则读不到result
            if (result != null){
                return result.list();
            }else{
                return Lists.newArrayList();
            }
        }


    }

    @Override
    public void close() throws IOException {
        driver.close();
    }
}
复制代码

 

posted @   Mars.wang  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示