当使用嵌入在tc-server实例数据库中的Neo4j时,不会干净地关闭

时间:2013-05-27 20:36:19

标签: neo4j spring-data-neo4j

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

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

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论坛上搜索了类似的问题,我找到的只有this post

但是我不认为这是相关的,因为Spring应该在关闭上下文时处理它。

<neo4j:config storeDirectory="target/data/graph.db"/>
<neo4j:repositories base-package="com.example.repository"/>

此标记的XML Parser清楚地在bean上注册了shutdown()destroy方法。

 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;
    }

另外不要被我的日志消息搞糊涂我的数据库实际上并不在webapps目录中,应用程序服务器上应用程序的路径实际上是:

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

有没有其他人遇到过这个问题,并想出如何解决它?对于我的小型示例应用程序来说,这不是什么大问题,但如果我为生产应用程序选择此技术,那么这不是我想要看到的消息。

1 个答案:

答案 0 :(得分:0)

彼得是对的。这不是Neo4j或Spring Neo4j的问题。显然,当在STS中运行tc-server的本地开发人员副本并选择停止服务器时,STS很难杀死它而不是发送一个关闭信号,否则会导致上下文销毁事件被发送到调度程序servlet。因此,永远不会在Spring上下文中调用生命周期事件,也不会清除任何内容。这确实应该是STS问题跟踪器上的一个问题。我很快就会对此进行跟进。