如何解决Spring boot 命令行应用程序不会以 neo4j 驱动程序终止
我已将 Neo4j 连接添加到一个简单的 Spring Boot 命令行应用程序 - 它实现了 CommandLineRunner
。
我几乎遵循了 Neo4j driver manual 中的示例,但我的应用程序在 main()
完成后并未终止。
与这些来源的唯一偏差是 driver.close()
方法不是在 main()
端调用,而是在 @PreDestroy
注释方法中调用:
@Service
public class DatabaseGraphService {
private volatile Driver driver;
private final Logger LOG;
public DatabaseGraphService() {
LOG = LogManager.getLogger(getClass());
}
@postconstruct
private void initialize() throws Exception {
driver = GraphDatabase.driver("bolt://localhost:7687",AuthTokens.basic("neo4j","neo4j"));
}
@PreDestroy
public void close() throws Exception {
LOG.info("Shutting down Neo4j driver...");
driver.close();
}
// ...
}
主类:
@SpringBootApplication(scanBasePackages={ "it" })
public class SpringBootConsoleApplication implements CommandLineRunner {
@Autowired
private DatabaseGraphService graphService;
private static Logger LOG = LoggerFactory
.getLogger(SpringBootConsoleApplication.class);
public static void main(String[] args) {
LOG.info("STARTING THE APPLICATION");
SpringApplication.run(SpringBootConsoleApplication.class,args);
LOG.info("APPLICATION FINISHED");
}
@Override
public void run(String... args) {
LOG.info("EXECUTING : command line runner");
}
}
我在 Sprint 工具套件(基于 Eclipse 的 IDE)中运行它,这是它记录的内容:
i.c.c.e.SpringBootConsoleApplication : APPLICATION FINISHED
但没有别的,进程保持活跃;当我按下停止按钮时:
inMXBeanRegistrar$SpringApplicationAdmin : Application shutdown requested.
i.c.c.services.DatabaseGraphService : Shutting down Neo4j driver...
com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
[...]
如果我在不执行任何查询的情况下运行程序,则该进程定期存在。只要我执行查询 - 无论我是使用所有结果还是对 Result
对象不执行任何操作 - 它都会保持活动状态。
我做错了吗?或者这可能是预期的行为,因为当 main()
完成时,只是它的线程终止?
虽然,在同一个应用程序中,我连接到一个 Postgresql 实例,也在那里进行查询,但应用程序在添加 Neo4j 连接之前正确终止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。