Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用嵌入在tc服务器中的Neo4j时,实例数据库不会完全关闭_Neo4j_Spring Data Neo4j - Fatal编程技术网

当使用嵌入在tc服务器中的Neo4j时,实例数据库不会完全关闭

当使用嵌入在tc服务器中的Neo4j时,实例数据库不会完全关闭,neo4j,spring-data-neo4j,Neo4j,Spring Data Neo4j,当tc服务器停止时(仅在STS中运行),shutdown()似乎没有在我的嵌入式neo4j数据库上正确调用 下面是我看到的日志消息: 16:03:43.358 [localhost-startStop-1] INFO neo4j.xafactory - Non clean shutdown detected on log [/home/billy/target/data/graph.db/nioneo_logical.log.1]. Recovery started ... INFO: No

当tc服务器停止时(仅在STS中运行),shutdown()似乎没有在我的嵌入式neo4j数据库上正确调用

下面是我看到的日志消息:

16:03:43.358 [localhost-startStop-1] INFO  neo4j.xafactory - Non clean shutdown detected on log [/home/billy/target/data/graph.db/nioneo_logical.log.1]. Recovery started ...

INFO: Non clean shutdown detected on log [/home/billy/target/data/graph.db/index/lucene.log.1]. Recovery started ...
我在Spring论坛上搜索了类似的问题,结果发现

然而,我认为这与此无关,因为当上下文关闭时,Spring应该处理这个问题

<neo4j:config storeDirectory="target/data/graph.db"/>
<neo4j:repositories base-package="com.example.repository"/>
另外,请不要被我的日志消息所迷惑,我的数据库实际上不在webapps目录中。应用程序服务器上的应用程序路径实际上是:

/home/billy/DevTools/springsource/vfabric-tc-server-developer-2.8.2.RELEASE/base-instance/wtpwebapps


有没有其他人遇到过这个问题,并找到了解决方法?对于我的小示例应用程序来说,这不是什么大问题,但我不想看到我是否为我的生产应用程序选择了这种技术。

Peter是对的。这不是Neo4j甚至Spring Neo4j的问题。显然,当在STS中运行tc服务器的本地开发人员副本并选择停止服务器时,STS硬杀死它,而不是发送关闭信号,否则会导致上下文破坏事件发送到dispatcher servlet。因此,不会在Spring上下文中调用生命周期事件,也不会清理任何内容。这确实应该是STS问题跟踪程序的一个问题。我很可能会在有时间的时候跟进此事。

你确定这是Neo4j的问题吗?你能用一个空的Javabean和一个shutdown()方法以及一个日志打印输出来进行测试吗?可能是Tomcat没有正确调用Spring关机序列。Peter你是对的,这很可能不是Neo4j的问题。我没有在独立应用程序中看到这一点。它发生在我决定用SpringNeo连接一个web应用程序时。当我停止tc服务器时,似乎没有执行关机挂钩。我想我可以试着在Spring和Neo4j关闭方法中设置一些断点,看看当我停止服务器时是否真的碰到了它们。虽然我不确定这会有多好,因为事情正在关闭,但我会尝试一下,然后发回。我在STS中用一个TCServer实例运行了一个快速测试。我在Springbean中创建了@PreDestory方法,右键单击服务器并选择stop。未调用该方法。我暗自怀疑停止(而不是终止)只是在扼杀事物,而不是发出一个优雅的关机序列。到家后,我会尝试将应用程序部署到IDE中嵌入的应用程序服务器之外的应用程序服务器上,看看是否有什么乐趣。
 private String handleStoreDir(Element element, ParserContext context, BeanDefinitionBuilder configBuilder) {
        String storeDir = element.getAttribute("storeDirectory");
        if (!hasText(storeDir)) return null;

        BeanDefinitionBuilder graphDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(EmbeddedGraphDatabase.class);
        graphDefinitionBuilder.addConstructorArgValue(storeDir);
        graphDefinitionBuilder.setScope("singleton");
        graphDefinitionBuilder.setDestroyMethodName("shutdown");
        context.getRegistry().registerBeanDefinition(GRAPH_DATABASE_SERVICE, graphDefinitionBuilder.getBeanDefinition());
        configBuilder.addPropertyReference(GRAPH_DATABASE_SERVICE, GRAPH_DATABASE_SERVICE);
        return GRAPH_DATABASE_SERVICE;
    }