Solved : Error starting applicationcontext. to display the condition evaluation report re-run your application with 'debug' enabled


My configuration file is not working in my Spring Boot application. It is giving me the error message: "Error starting ApplicationContext. To display the auto-configuration report, re-run your application with 'debug' enabled." to solve that issue we added the following dependency to our project's pom.xml file:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>7.0.0</version>
</dependency>

In our view, this solution is effective because it addresses the specific version dependency required for Hibernate core. By adding the dependency with the correct version to the project configuration file, we Ensure that the necessary Hibernate libraries are included in the project's classpath, allowing us to use Hibernate functionality without encountering version conflicts or missing dependencies.

When encountering the error "Error starting applicationcontext," it typically indicates a problem with initializing the application context in a Spring Boot application. To display the report and eror message , you need to re-run the application with 'debug' enabled.

To resolve this error, we can follow these steps:

  1. In the IDE or terminal where the application is being run, enable debug mode. This can usually be done by adding the '--debug' flag when running the application.
  2. Rerun the application with debug enabled. For example, if using Maven, we can run:
    mvn spring-boot:run --debug
  3. Observe the output in the console for any additional error messages or warnings.
  4. Once the application starts successfully with debug enabled, examine the condition evaluation report to identify any issues with bean creation or configuration.
  5. Address any errors or warnings reported in the condition evaluation report.
  6. After resolving the issues, restart the application without debug mode enabled to verify that the problem has been fixed.
2

When encountering this error, it was discovered that the issue stemmed from attempting to access the application context in a field initialization or constructor within a class, specifically in the context of AuthenticationFilter extending UsernamePasswordAuthenticationFilter. This class gets instantiated before the context is available.

The error was resolved by moving the statement myField = (MyClass) applicationContext.getBean(MyClass.BEAN_NAME); to a method that gets called early in the class's lifecycle but after the constructor. By doing so, the error was resolved, and the application started up normally.

Annoyingly, due to the opaqueness of Spring Boot's dependency injection model, the error manifested as a classic null pointer exception. The log didn't provide the class and line number where the error occurred, necessitating deduction from indirect evidence to identify the issue.

To address the same problem, the solution involved modifying the application.properties file located at src/main/resources. The fix consisted of adding a property to specify a different port number:

server.port=8180

By specifying a unique port number in the properties file, the conflict was resolved, allowing the application to run without issues.

3

To resolve the issue, changing the version in the project's pom.xml file was the solution:


        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.5.6</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    

By updating the version to 2.5.6, the issue was successfully resolved.

To enhance the project setup, the following adjustments were made:

  1. Removed spring-context dependency, as spring-boot-starter-parent already manages dependencies.
  2. Refrained from introducing dependencies of Spring with a different version.
  3. Avoided running Spring Boot main inside a CommandLineRunner implementing class. Instead, extracted the relevant code from the run method and utilized it directly in the main method. Removed implements CommandLineRunner from relevant classes.
  4. Removed @EnableAutoConfiguration annotation, as it's included implicitly by @SpringBootApplication.
  5. Eliminated PropertySourcesPlaceholderConfigurer as Spring Boot provides one by default.
  6. Utilized Spring Boot's automatic database connection setup by providing properties in the application.properties file:

        spring.datasource.url=jdbc:mysql://localhost:3306/yourDatabaseName?useSSL=false
        spring.datasource.username=yourDatabaseUsername
        spring.datasource.password=yourDatabasePassword
    

With these refinements, the project configuration and dependencies are optimized, adhering to best practices and leveraging Spring Boot's features efficiently.

To address the issue, the solution involved replacing the JPA dependency starter with spring-data-commons and spring-data-jpa dependencies. Here's the updated configuration:


        <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>3.0.3</version>
        </dependency> -->

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>3.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>3.0.2</version>
        </dependency>
    

By replacing the JPA starter with spring-data-commons and spring-data-jpa dependencies, the issue was successfully resolved for Spring Boot version 3.0.3.

4

To include Hibernate Core in your project, add the following dependency:


        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.7.Final</version>
        </dependency>
    

This will ensure that Hibernate Core version 5.0.7.Final is included in your project's dependencies.

In my case, including JDBC API dependencies in the project prevented the "Hello World" from being printed. However, after removing the following dependency, everything worked perfectly:


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>