Может ли кто-нибудь сказать мне, как я могу создать сервис для встроенной базы данных neo4j с использованием Spring-данных, но установить путь к базе данных во время выполнения, а не при запуске. В моем приложении местоположение базы данных зависит от ввода от пользователя. В настоящее время у меня есть компонент службы базы данных, который определяется следующим образом:
@Bean
GraphDatabaseService graphDatabaseService() {
GraphDatabaseService graphDB = new GraphDatabaseFactory().newEmbeddedDatabase("/path/to/db");
return graphDB;
}
Это не работает, потому что я не знаю, какой должен быть этот путь до тех пор, пока приложение не запустится. Любая помощь здесь будет оценена по достоинству.
Я не думаю, что вы можете это сделать, если вы укажете этот компонент уже в своем классе конфигурации. Если вы укажете его в этом файле, убедитесь, что вы добавили @Bean(destroyMethod = "shutdown")
в свой метод создания.
Вы можете указать singleton beans во время выполнения. Когда у вас есть каталог базы данных, вы можете сделать что-то похожее на это:
GraphDatabaseService graphDB = new GraphDatabaseFactory().newEmbeddedDatabase("user_dir");
// get a hold of ConfigurableApplicationContext#getBeanFactory()
beanFactory.registerSingleton("graphDatabaseService", graphDB);
Обязательно выключите GraphDatabaseService, когда приложение завершит работу.