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