SpringBoot Fails now when I switch from spring data neo4j 4.1.3 to 5.0.0

311 Views Asked by At

Background

I have an application with spring data neo4j, and I switched from 4.1.3 to 5.0.0.

I believe that I have made all the necessary changes to convert my code over but I still get errors.

My current version of spring boot is

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot</artifactId>
    <version>1.4.1.RELEASE</version>
</dependency>

Problem

When I run: mvn spring-boot:run in the command line,

I get an error:

***************************
APPLICATION FAILED TO START
***************************

Description:

Field actionRepository in myproject.service.ActionServiceImpl required a bean of type 'myproject.repository.ActionRepository' that could not be found.


Action:

Consider defining a bean of type 'myproject.repository.ActionRepository' in your configuration

My myproject.Application.java is currently

@SpringBootApplication
@EnableTransactionManagement
@EnableSwagger2
@EntityScan(basePackages = "myproject.domain")
public class Application {

    public static void main(String[] args) {
        new SpringApplication(Application.class).run(args);
    }

    @Bean
    public Docket Api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .pathMapping("/")
                .apiInfo(apiInfo());
    }

    private springfox.documentation.service.ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            .title("Service API")
    }
}

And this does not find any of my controllers like myproject.controller.ActionController.java which contains

...
@RestController
@Api(value = "Action", description = "Actions Management API")
@RequestMapping(value = "/api/action")
public class ActionController extends Controller<Action> {
...

Attempt #1

If I add the annotation @ComponentScan({"myproject.request"}) to my Application class, the error goes away, but spring boot cannot load any controllers and as such my Swagger shows no APIs and no controllers are run. This is not the solution. @SpringBootApplication should take care of all this.

Question

How do I reconfig spring boot to start working like it did in version 4.1.3 of spring data neo4j?

UPDATE 1 ATTEMPT #2

I tried adding this annotation to my class Application

@EnableNeo4jRepositories("myproject.repository") 

And the error changed to something less clean:

...

2017-10-05 13:19:46.992 ERROR 561 --- [           main] o.s.boot.SpringApplication               : Application startup failed

java.lang.NoSuchMethodError: org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute(Ljava/lang/String;)Ljava/util/Optional;
    at org.springframework.data.neo4j.repository.config.Neo4jRepositoryConfigurationExtension.postProcess(Neo4jRepositoryConfigurationExtension.java:110) ~[spring-data-neo4j-5.0.0.RELEASE.jar:5.0.0.RELEASE]
    at org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn(RepositoryConfigurationDelegate.java:130) ~[spring-data-commons-1.12.0.RELEASE.jar:na]
    at org.springframework.data.repository.config.RepositoryBeanDefinitionRegistrarSupport.registerBeanDefinitions(RepositoryBeanDefinitionRegistrarSupport.java:83) ~[spring-data-commons-1.12.0.RELEASE.jar:na]

...
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.4.1.RELEASE:run (default-cli) on project myproject: An exception occurred while running. null: InvocationTargetException: org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute(Ljava/lang/String;)Ljava/util/Optional; -> [Help 1]
[ERROR] 

...

UPDATE 2

In an attempt to use the @EnableNeo4jRepositories("myproject.repository") and bypass the error in Update 1, I tried:

mvn clean install spring-boot:repackage

And it gave a Build Success, but the same error persists:

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.4.1.RELEASE:run (default-cli) on project myproject: An exception occurred while running. null: InvocationTargetException: org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute(Ljava/lang/String;)Ljava/util/Optional; -

UPDATE 3

I have the new annotation and changed my pom from:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons</artifactId>
        <version>1.12.0.RELEASE</version>
    </dependency>

to

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons</artifactId>
        <version>2.0.0.RELEASE</version>
    </dependency>

and now mvn spring-boot:run

gives the error:

***************************
APPLICATION FAILED TO START
***************************

Description:

A component required a bean named 'getSessionFactory' that could not be found.


Action:

Consider defining a bean named 'getSessionFactory' in your configuration.
1

There are 1 best solutions below

3
On BEST ANSWER

Try adding this annotation on your configuration class :

@EnableNeo4jRepositories("myproject.repository")

Update :

I just saw you're on Spring boot 1.4. SDN 5 is only compatible with Spring Boot 2.0. Details are in the compatibility table.