0

当 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 论坛和 SO 中搜索了类似的问题,我发现的只是这篇文章

但是我认为这与这里无关,因为当上下文关闭时 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

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

4

1 回答 1

0

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

于 2013-05-31T00:51:30.227 回答