如何使用 Spring Data Neo4j 3.4.0 配置 Neo4j 存储库?

How to configure the Neo4j repository with Spring Data Neo4j 3.4.0?

我尝试在 search.maven.org 上将 spring data neo4j 从 3.3.2 升级到 3.4.0 版本,但现在构建出现以下异常:

AnnotationFormatError: Invalid default: public abstract java.lang.Class org.springframework.data.neo4j.config.EnableNeo4jRepositories.repositoryBaseClass()

该应用程序在 3.3.2 中运行良好。

配置如下class:

@Configuration
@EnableNeo4jRepositories(basePackages = { "it.data.neo4j.repository" })
@EnableTransactionManagement
@ComponentScan(basePackages = { "it.data.neo4j.service" })
public class Neo4JRepositoryConfiguration extends Neo4jConfiguration {

  private static Logger logger = LoggerFactory.getLogger(Neo4JRepositoryConfiguration.class);

  public static final String URL = "http://localhost:7474/db/data/";
  public static final String LOGIN = "neo4j";
  public static final String PASSWORD = "xxxx";

  Neo4JRepositoryConfiguration() {
    setBasePackage("it.data.neo4j.domain");
  }

  @Bean
  GraphDatabaseService graphDatabaseService() {
    return new SpringCypherRestGraphDatabase(URL, LOGIN, PASSWORD);
  }

  @Autowired
  LocalContainerEntityManagerFactoryBean entityManagerFactory;

  @Override
  public PlatformTransactionManager neo4jTransactionManager(
      GraphDatabaseService graphDatabaseService) {
    return new ChainedTransactionManager(
        new JpaTransactionManager(entityManagerFactory.getObject()),
        new JtaTransactionManagerFactoryBean(graphDatabaseService).getObject());
  }

}

依赖项是:

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-neo4j</artifactId>
  <version>3.4.0.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-neo4j-rest</artifactId>
  <version>3.4.0.RELEASE</version>
</dependency>

您的包 it.data.neo4j.repository 是否同时包含 JPA 和 Neo4j 存储库?如果是这样,您可能需要将它们分成单独的包。

此外,SpringData Neo4j version 4较之前的版本有了较大的转变,涉及到一些代码迁移,可能您的实际应用代码需要调整以兼容SDN4:

http://docs.spring.io/spring-data/neo4j/docs/4.0.0.RELEASE/reference/html/#migration

很可能 class 路径依赖与 spring-data-commons.jar

冲突

确保 class 路径上的所有 jar 都使用相同版本的 spring-data-commons。

在我的例子中,我有 2 个 jar 引用了 spring-data-commons.jar 1.10 和 1.11,这导致了这个问题。