Java-процесс не остановится после запроса neo4j - PullRequest
0 голосов
/ 16 октября 2018

Я подключаюсь к удаленной базе данных neo4j, используя ConfigrationSource и SessionFactory из neo4j OGM следующим образом:

private final static ConfigurationSource props = new ClasspathConfigurationSource("neo4j-connection.properties");
    private final static Configuration configuration = new Configuration.Builder(props).build();
    private final static SessionFactory sessionFactory = new SessionFactory(configuration, "domain");

Затем я запускаю запрос шифрования и возвращаю Iterable из POJO, сопоставленный сУзлы neo4j с аннотациями OGM

private final LinkedBlockingQueue<Session> sessionPool = new LinkedBlockingQueue<>(8192);
@Override
    public Iterable<Location> findAll() {
        try {
            return session.loadAll(Location.class, 1);
        } finally {
            closeSession(session);
        }
    }
private void closeSession(Session session) {
        if (session != null) {
            try {
                sessionPool.offer(session, 100, TimeUnit.MILLISECONDS);
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }
    }

Все работает нормально, в моем методе main у меня есть объект POJO, созданный со значениями neo4j

public static void main(String[] args) {
        LocationServiceImpl locationService = new LocationServiceImpl();
        Iterable<Location> locations = locationService.findAll();
        for(Location location : locations) {
            System.out.println(location.getSubType());//eg. prints Floor, Building etc
        }
        System.out.println("End");
    }

Но после завершения метода main приложение победило 'не останавливайся.Над строкой «End» печатается.Так что где-то висит поток, и я не могу понять, где и почему.

Я попытался закрыть сеанс neo4j ogm, но безуспешно.

Мои зависимости neo4j ogm pom

 <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-bolt-driver</artifactId>
            <version>3.1.2</version>
            <scope>runtime</scope>
        </dependency>
 <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-jdbc-driver</artifactId>
            <version>3.4.0</version>
        </dependency>
<dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-core</artifactId>
            <version>3.1.3</version>
        </dependency>

Печать экрана с визуального вм enter image description here

1 Ответ

0 голосов
/ 17 октября 2018

Вы также должны закрыть SessionFactory.

Некоторые предыстории: я предполагаю, что вы используете протокол Bolt для соединения.Создание экземпляра SessionFactory также создаст экземпляр драйвера java (bolt) со всеми пулами подключений и т. Д. Чтобы выполнить чистый вызов отключения sessionFactory.close(), он также отключит / закроет драйвер.

...