0

SDN 4.1 참조에서 Neo4jConfiguration을 확장하고 세션 객체를 @Bean으로 명시 적으로 설정하는 구성이 포함됩니다. 4.2에서, 지침은 Neo4jConfiguration을 확장하지 않고 아래의 설정을 따르는 것입니다. 명시 적으로 독립 세션 개체를 설정하는 것은 존재하지 않는다 참고 : 나는 저장소 클래스에서 세션 객체 자체 (안 공장) @Autowiring 동안 사용이 설정을 본 적이SDN 4.2 용 Autowiring Neo4j OGM 세션

@Bean 
public org.neo4j.ogm.config.Configuration configuration() { 
    org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration(); 
    config 
      .driverConfiguration() 
      .setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver") 
      .setURI(dbLocation); 
    return config; 

@Bean 
public SessionFactory sessionFactory() { 
    SessionFactory sessionFactory = new SessionFactory(configuration(), "org.my.package"); 
    sessionFactory.register(new MyPreSaveListener()); 
    return sessionFactory; 
} 

. 이것은 응용 프로그램에서 단 하나의 Session 인스턴스 만 존재한다는 것을 의미합니까? 그렇다면 세션 수명이 응용 프로그램의 "작업 단위 (UOW)"로 제한되어야한다는 아이디어에 어긋나지 않습니까?

내 저장소는 현재 사용자 지정이며 Neo4jTemplate 개체를 사용하지 않고 현재 마이 그 레이션 중이므로 neo4j repos를 확장하지 않습니다.

답변

1

아니요, 애플리케이션 당 세션이 하나도 없습니다. @Transactional 주석 또는 TransactionTemplate에서 Session이 호출되면 프록시 (Session)가 호출됩니다 (시작시 스프링 데이터 Neo4j 프레임 워크에서 생성 됨). 이렇게하면 트랜잭션의 유효 기간 동안 세션이 효과적으로 생성되고 (범위가 지정된 경우) 한 번 범위를 벗어나 가비지 수집 될 수 있습니다.

+0

위의 구성을 사용하여 세션 객체를 Autowire하려고 시도했습니다. "NoSuchBeanDefinitionException : 'org.neo4j.ogm.session.Session'타입의 정규화 된 Bean이 없습니다 : autowire 후보로 자격이되는 적어도 하나의 bean이 필요합니다."SessionFactory에서 Session 인스턴스를 가져 오지 못하게 할 수있는 사항은 무엇입니까? – ramenhood

+0

'@ EnabledNeo4jRepositories'와'@ EnabledTransactionManagement'을 가지고 있습니까? 'Session'을 autowire하는 장소가'@Component'인지 확인해야합니다. – digx1

관련 문제