Error creating bean with name configurationPropertiesBeans defined in class path resource

Describe the bug
I try to migrate from springfox-swagger to springdoc-openapi.
In a Kotlin + Spring Webflux application, I have the following dependencies

implementation("org.springdoc:springdoc-openapi-ui:1.6.3")
        implementation("org.springdoc:springdoc-openapi-webflux-ui:1.6.3")
        //implementation("org.springdoc:springdoc-openapi-security:1.6.3") -- App using spring security
        implementation("org.springdoc:springdoc-openapi-kotlin:1.6.3")

And this is springdoc config:

import io.swagger.v3.oas.annotations.enums.ParameterIn
import io.swagger.v3.oas.models.media.StringSchema
import io.swagger.v3.oas.models.parameters.Parameter
import org.springdoc.core.GroupedOpenApi
import org.springdoc.core.customizers.OperationCustomizer
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Profile

@Configuration
//@Profile(ProfileCode.EXCEPT_PROD)
class SpringdocConfig {

    @Bean
    fun api(): GroupedOpenApi {
        return GroupedOpenApi.builder()
            .group("group name")
            .packagesToScan("my.package")
            .addOperationCustomizer(globalParameters())
            .build()
    }

    @Bean
    fun globalParameters(): OperationCustomizer {
        return OperationCustomizer { operation, _ ->
            operation
                .addParametersItem(Parameter().name(HttpHeader.AUTHORIZATION_KEY).description("access token").required(true).`in`(ParameterIn.HEADER.toString()).schema(StringSchema()))
                //.addParametersItem ........ and a lot of parameters
        }
    }
}

When the app starts, there is no error.
However when the test code execute, I get the following error:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'multipleOpenApiResource' defined in class path resource [org/springdoc/webflux/core/MultipleOpenApiSupportConfiguration.class]: Unsatisfied dependency expressed through method 'multipleOpenApiResource' parameter 3; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'responseBuilder' defined in class path resource [org/springdoc/webflux/core/SpringDocWebFluxConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springdoc.core.GenericResponseService]: Factory method 'responseBuilder' threw exception; nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletException

Since I'm not sure there is no error on my test code, so I create sample test code like:

import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest

@SpringBootTest
class SampleTest {

    @Test
    fun test(){

    }
}

but, error still..... :(

To Reproduce
Steps to reproduce the behavior:

  • What version of spring-boot you are using? : 2.5.6
  • What modules and versions of springdoc-openapi are you using? : 1.6.4
  • What is the actual and the expected result using OpenAPI Description (yml or json)?
  • Provide with a sample code (HelloController) or Test that reproduces the problem
    Get the sample code from "https://github.com/addio3305/springdoc.git"

Home / Q&A / Migrate spring boot app from 2.4.4 to 2.6.6 we are getting denodo bean creation issue!

You can translate the question and the replies:

Tag too long

1 Answer

Hi, I was able to successfully run the Spring Application by declaring a similar Bean class. In that case, I would make sure that the Denodo JDBC driver is available in the build Path and all the required dependencies are available in the POM.xml. Furthermore, I would check if the there are any differences in the code when using Spring 2.4.4 and Spring 2.6.6. Also, I would first try to only estalibish connection to the source (denodo) to check if the connection itself is established or if the issue is with establishing the connection itself. Furthermore, I would also check in the release notes of the Spring version if there are any changes made in the Spring boot 2.6.6 that is different from the 2.4.4 in the way the source initialisation is done. For any additonal setting/ properties that has to be added to the code. Hope this help!

Denodo Team
27-04-2022 08:44:11 -0400

Error creating bean with name configurationPropertiesBeans defined in class path resource

Hello guys, If you are using Spring Boot and getting errors like "Cannot determine embedded database driver class for database type NONE" or "Error creating a bean with name 'dataSource' defined in class path resource ataSourceAutoConfiguration" then you have come to the right place. In this article, we'll examine different scenarios on which this Spring Boot error comes and what you can do to solve them. The general reason for this error is Spring Boot's auto-configuration, which is trying to automatically configure a DataSource for you but doesn't have enough information. It is automatically trying to create an instance of DataSourceAutoConfiguration bean and it's failing.

Like other Spring frameworks errors, the stack trace looks quite messy, something which they could have improved with Spring Boot, but the gest is here are these two errors I mentioned above.

Let's see the stacktrace looks in general:

org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.:
[INFO] org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.

Btw, these errors can be intimidating if you are completely new to Spring framework. In that case, I suggest you go through a comprehensive Spring Boot course like the Learn Spring Boot by Dan Vega on Udemy.   Now, let's see some common cause of this error and what you can do to solve this problem.

1. Spring Boot Error due to Starter Dependency

Some of my friends and readers got this error even if they don't need a Database. The main reason they were getting this error was because of starter dependency like some of they have included spring-boot-starter-data-jpa which then included hibernate-entitymanager.jar and they didn't have additional things need to set that up.

Sometimes including incorrect Starter POM can also solve this problem like adding spring-boot-starter-jdbc instead of spring-boot-starter-data-jpa dependency.

If you know, Spring Boot auto-configuration is triggered by JAR dependencies present in the classpath and if it pulls something which you don't need then this type of error can come.

That's why a good knowledge of Spring fundamentals are needed to use Spring boot correctly. If you are new into the Spring framework, I suggest you go through Learn Spring: The Certification Class by Eugen Paraschiv of Baeldung to learn Spring 5 and Spring Boot 2 from scratch, in a guided, code-focused way

Error creating bean with name configurationPropertiesBeans defined in class path resource

2. Due to Missing Dependency

Sometimes you do need a database but you forgot to include the driver JAR file into the classpath, which can also cause this error. For example, you have specified the following properties in the application.properties, spring boots configuration file but didn't include the corresponding MySQL JDBC driver into the classpath

spring.datasource.url = jdbc:mysql://localhost/test
spring.datasource.driver-class-name= com.mysql.jdbc.Driver

In order to solve this error, either you need to include the correct Starter POM dependency or manually add the MySQL JDBC JAR file into the classpath. If you are interested, you can see this tutorial to learn more about how to connect a Java application to a database using a MySQL database in this tutorial.

3. Due to Missing Configuration in Application.properties

Spring Boot is good at configuring in-memory Databases like H2, HSQLDB, Derby, etc and it can configure them by just adding their JAR files into the classpath but for others, you need to give Spring Boot additional details like URL, DriverClass name, etc.

You can do that by adding some properties to application.properties file with the spring.datasource prefix, as shown in following example:

spring.datasource.url = jdbc:mysql://localhost/abc
spring.datasource.name=testme
spring.datasource.username=xxxx
spring.datasource.password=xxxx
spring.datasource.driver-class-name= com.mysql.jdbc.Driver spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect

This will provide the Spring Boot auto-configuration component to configure the database for you. If you want to learn more about how auto-configuration works in Spring Boot, I suggest you go through a comprehensive Spring boot course like Spring Boot: Efficient Development, Configuration, and Deployment course on Pluralsight, which will also teach you the details behind @EnableAutoConfiguration by writing your own auto configurations.

Error creating bean with name configurationPropertiesBeans defined in class path resource

4. Exclude DataSourceAutoConfiguration

Sometimes excluding DataSourceAutoConfigution can also solve this problem, especially if you don't need Database. This will prevent Spring Boot from automatically configuration database and there won't be any error. You can disable auto-configuration for certain classes by using the exclude Attribute of @EnableAutoConfiguration annotation of Spring Boot as shown below:

@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class SpringBootDemo {
 
  public static void main(String[] args) {
   SpringApplication.runSpringBootDemo.class, args);
  }
 
}

You can even exclude more than one classes using exclude attribute with @EnableAutoConfiguration as shown below:

@Configuration
@EnableAutoConfiguration(
exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class SpringBootDemo {
 
  public static void main(String[] args) {
     SpringApplication.runSpringBootDemo.class, args);
  }
 
}

That's all about how to solve "Cannot determine embedded database driver class for database type NONE" or "Error creating a bean with name 'dataSource' defined in class path resource DataSourceAutoConfiguration" problem. In most of the cases, it is because of auto-configuration doesn't have enough details require to configure Database but sometimes it's also the accidental trigger of database auto-configuration which can be disabled using exclude attribute of @EnableAutoConfiguration annotation.

Btw, if you want to learn Spring Boot in depth, here are some useful resources for your learning:

Other Java and Spring Boot articles you may like

  • 5 Spring Boot Features Every Java Developer Should Know (features)
  • Top 5 Free Courses to learn Spring and Spring Boot  (courses)
  • 15 Spring Boot Interview Questions for Java developers (questions)
  • 5 Course to Master Spring Boot online (courses)
  • 10 Things Java Developer should learn (goals)
  • 10 Tools Java Developers use in their day-to-day life (tools)
  • 10 Tips to become a better Java developer  (tips)
  • 3 Best Practices Java Programmers can learn from Spring (best practices)
  • Top 5 Spring Boot Annotations Java Developers should know (annotations)
  • 5 books to learn Spring Boot and Spring Cloud (books)
  • 5 courses to learn Spring Boot in depth ( courses)
  • 21 Skills Java Developers Can Learn to Enhance heir profile (skills)

Thanks for reading this article so far. If you like my explanation and solution of this Spring Boot error then please share with your friends and colleagues. If you have any questions or feedback then please drop a note.

P. S. - If you are interested in learning Spring Boot but looking for a free course to start with then I suggest you check the Free Introducing Spring Boot course on Udemy to kick start your journey into the beautiful world of Spring.

Why do we get bean creation exception?

By far, the most common cause of the BeanCreationException is Spring trying to inject a bean that doesn't exist in the context. To diagnose this type of issue, we'll first make sure the bean is declared: either in an XML configuration file using the element.

Can not create bean Spring?

There could be numerous reasons why Spring could not able to create a bean with name X, but clue always lies on the detailed stack trace. This error always has some underlying cause e.g. a ClassNotFoundException or a NoClassDefFoundError, which potentially signal a missing JAR file in the classpath.

What is the latest spring boot version?

What is the latest Spring Boot version? The current stable version, as of July 2022, is Spring Boot 2.7.