0

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.
Rorschach
  • 3,684
  • 7
  • 33
  • 77

1 Answers1

1

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.

nmervaillie
  • 1,145
  • 8
  • 20
  • I have updated the pom and I got to a new error which can be seen in update 3. Thanks for the suggestions I think I am moving in the right direction – Rorschach Oct 05 '17 at 14:16
  • I have not solved the problem from Update 3, but I am going to accept your answer because I think you solved the initial question. – Rorschach Oct 05 '17 at 14:23
  • 1
    Spring Data (and Spring boot) projects work with the concept of release trains to avoid this king of dependency confilcts. Release trains pulls a set of coherent jar versions working together. You should have a look at this for an example : https://github.com/spring-projects/spring-data-examples/tree/master/bom – nmervaillie Oct 06 '17 at 08:26