Spring Boot jdbc datasource autoconfiguration fails on standalone tomcat

44,897

Solution 1

This is most likely an issue with the 0.5.0.M6 version and the Tomcat version you are using. It does work with Spring Boot 0.5.0.M7 and Tomcat 7.0.47.

Solution 2

Hi make sure you are not missing the JPA library.

spring-boot-starter-data-jpa

Solution 3

@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class,
        HibernateJpaAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class })

Worked for me for version 1.3.3

Solution 4

I was facing the same issue earlier and same was resolved by adding

@PropertySource("classpath:application.properties")

in Application.java Hope this helps

Solution 5

For me it was throwing the exception in JdbcTemplateAutoConfiguration. I added exclude JdbcTemplateAutoConfiguration in the Application.java. Hope it helps.

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, JdbcTemplateAutoConfiguration.class })
Share:
44,897
Bert
Author by

Bert

Updated on May 18, 2020

Comments

  • Bert
    Bert almost 4 years

    While trying to deploy and start a spring boot application on a standalone tomcat (7) instance, we ran into an issue were the autoconfigured spring datasource bean isn't found and the corresponding exception is thrown:

    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
    No qualifying bean of type [javax.sql.DataSource] found for dependency: 
    expected at least 1 bean which qualifies as autowire candidate for this dependency. 
    Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}    at
         org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1060)  at 
        org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:920)   at 
        org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:815)     at 
        org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)   ... 84 more
    

    The simple jdbc spring.datasource is properly configured in the application.properties and the application itself runs perfectly with an embedded tomcat instance as a standalone spring boot application.

    It seems as if the application.properties file cannot be read and/or processed properly, or the injection of some other beans (a service in a REST controller for example) is triggered before the datasource autoconfiguration has been done.

    Is any extra configuration required when not using an embedded tomcat? Or has anyone run into similar issues?

    The simple application and configuration:

    @EnableAutoConfiguration
    @Configuration
    @ComponentScan("com.foo")
    public class Application extends SpringBootServletInitializer {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }
    
    }
    

    application.properties:

    spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
    spring.datasource.username=username
    spring.datasource.password=password
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    

    Datasource usage example:

    @Repository
    public class MyRepositoryImpl implements MyRepository {
    
        @Autowired
        private DataSource dataSource;
    
    ...
    }
    

    Pom parent & dependencies:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>0.5.0.M6</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.27</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.0.0.RC1</version>
        </dependency>
    </dependencies>
    

    Auto configuration report of failed start:

    =========================
    AUTO-CONFIGURATION REPORT
    =========================
    
    
    Positive matches:
    -----------------
    
       MessageSourceAutoConfiguration
          - @ConditionalOnMissingBean (types: org.springframework.context.MessageSource; SearchStrategy: all) found no beans (OnBeanCondition)
    
       PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer
          - @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) found no beans (OnBeanCondition)
    
       DataSourceAutoConfiguration
          - @ConditionalOnClass classes found: org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType (OnClassCondition)
          - @ConditionalOnClass classes found: org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType (OnClassCondition)
    
       DataSourceAutoConfiguration.JdbcTemplateConfiguration
          - existing auto database detected (DataSourceAutoConfiguration.DatabaseCondition)
          - existing auto database detected (DataSourceAutoConfiguration.DatabaseCondition)
    
       DataSourceAutoConfiguration.JdbcTemplateConfiguration#jdbcTemplate
          - @ConditionalOnMissingBean (types: org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) found no beans (OnBeanCondition)
    
       DataSourceAutoConfiguration.JdbcTemplateConfiguration#namedParameterJdbcTemplate
          - @ConditionalOnMissingBean (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; SearchStrategy: all) found no beans (OnBeanCondition)
    
       DataSourceAutoConfiguration.TomcatConfiguration
          - found database driver com.mysql.jdbc.Driver (DataSourceAutoConfiguration.TomcatDatabaseCondition)
          - found database driver com.mysql.jdbc.Driver (DataSourceAutoConfiguration.TomcatDatabaseCondition)
          - @ConditionalOnMissingBean (types: javax.sql.DataSource; SearchStrategy: all) found no beans (OnBeanCondition)
    
       DataSourceTransactionManagerAutoConfiguration
          - @ConditionalOnClass classes found: org.springframework.jdbc.core.JdbcTemplate,org.springframework.transaction.PlatformTransactionManager (OnClassCondition)
          - @ConditionalOnClass classes found: org.springframework.jdbc.core.JdbcTemplate,org.springframework.transaction.PlatformTransactionManager (OnClassCondition)
    
       DataSourceTransactionManagerAutoConfiguration#transactionManager
          - @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found the following [dataSource] @ConditionalOnMissingBean (names: transactionManager; SearchStrategy: all) found no beans (OnBeanCondition)
          - @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found the following [dataSource] @ConditionalOnMissingBean (names: transactionManager; SearchStrategy: all) found no beans (OnBeanCondition)
    
       DispatcherServletAutoConfiguration
          - found web application StandardServletEnvironment (OnWebApplicationCondition)
          - @ConditionalOnClass classes found: org.springframework.web.servlet.DispatcherServlet (OnClassCondition)
          - found web application StandardServletEnvironment (OnWebApplicationCondition)
          - @ConditionalOnClass classes found: org.springframework.web.servlet.DispatcherServlet (OnClassCondition)
          - @ConditionalOnBean (types: org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; SearchStrategy: all) found the following [tomcatEmbeddedServletContainerFactory] (OnBeanCondition)
    
       DispatcherServletAutoConfiguration#dispatcherServlet
          - no DispatcherServlet found (DispatcherServletAutoConfiguration.DefaultDispatcherServletCondition)
    
       EmbeddedServletContainerAutoConfiguration
          - found web application StandardServletEnvironment (OnWebApplicationCondition)
          - found web application StandardServletEnvironment (OnWebApplicationCondition)
    
       EmbeddedServletContainerAutoConfiguration.EmbeddedTomcat
          - @ConditionalOnClass classes found: javax.servlet.Servlet,org.apache.catalina.startup.Tomcat (OnClassCondition)
          - @ConditionalOnClass classes found: javax.servlet.Servlet,org.apache.catalina.startup.Tomcat (OnClassCondition)
          - @ConditionalOnMissingBean (types: org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; SearchStrategy: current) found no beans (OnBeanCondition)
    
       ServerPropertiesAutoConfiguration#serverProperties
          - @ConditionalOnMissingBean (types: org.springframework.boot.context.embedded.properties.ServerProperties; SearchStrategy: all) found no beans (OnBeanCondition)
    
       WebMvcAutoConfiguration
          - found web application StandardServletEnvironment (OnWebApplicationCondition)
          - @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.servlet.DispatcherServlet,org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter (OnClassCondition)
          - found web application StandardServletEnvironment (OnWebApplicationCondition)
          - @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.servlet.DispatcherServlet,org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter (OnClassCondition)
          - @ConditionalOnMissingBean (types: org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy: all) found no beans (OnBeanCondition)
    
       WebMvcAutoConfiguration#hiddenHttpMethodFilter
          - @ConditionalOnMissingBean (types: org.springframework.web.filter.HiddenHttpMethodFilter; SearchStrategy: all) found no beans (OnBeanCondition)
    
       WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#defaultViewResolver
          - @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.InternalResourceViewResolver; SearchStrategy: all) found no beans (OnBeanCondition)
    
    
    Negative matches:
    -----------------
    
       RabbitAutoConfiguration
          - required @ConditionalOnClass classes not found: org.springframework.amqp.rabbit.core.RabbitTemplate,com.rabbitmq.client.Channel (OnClassCondition)
    
       AopAutoConfiguration
          - required @ConditionalOnClass classes not found: org.aspectj.lang.annotation.Aspect,org.aspectj.lang.reflect.Advice (OnClassCondition)
    
       BatchAutoConfiguration
          - required @ConditionalOnClass classes not found: org.springframework.batch.core.launch.JobLauncher (OnClassCondition)
    
       JpaRepositoriesAutoConfiguration
          - required @ConditionalOnClass classes not found: org.springframework.data.jpa.repository.JpaRepository (OnClassCondition)
    
       MongoRepositoriesAutoConfiguration
          - required @ConditionalOnClass classes not found: com.mongodb.Mongo,org.springframework.data.mongodb.repository.MongoRepository (OnClassCondition)
    
       DataSourceAutoConfiguration.DbcpConfiguration
          - tomcat DataSource (DataSourceAutoConfiguration.BasicDatabaseCondition)
    
       DataSourceAutoConfiguration.EmbeddedConfiguration
          - existing non-embedded database detected (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)
    
       JmsTemplateAutoConfiguration
          - required @ConditionalOnClass classes not found: org.springframework.jms.core.JmsTemplate,javax.jms.ConnectionFactory (OnClassCondition)
    
       DeviceResolverAutoConfiguration
          - required @ConditionalOnClass classes not found: org.springframework.mobile.device.DeviceResolverHandlerInterceptor,org.springframework.mobile.device.DeviceHandlerMethodArgumentResolver (OnClassCondition)
    
       HibernateJpaAutoConfiguration
          - required @ConditionalOnClass classes not found: javax.persistence.EntityManager,org.hibernate.ejb.HibernateEntityManager (OnClassCondition)
    
       ReactorAutoConfiguration
          - required @ConditionalOnClass classes not found: reactor.spring.context.config.EnableReactor (OnClassCondition)
    
       ThymeleafAutoConfiguration
          - required @ConditionalOnClass classes not found: org.thymeleaf.spring3.SpringTemplateEngine (OnClassCondition)
    
       EmbeddedServletContainerAutoConfiguration.EmbeddedJetty
          - required @ConditionalOnClass classes not found: org.eclipse.jetty.server.Server,org.eclipse.jetty.util.Loader (OnClassCondition)
    
       MultipartAutoConfiguration
          - @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.multipart.support.StandardServletMultipartResolver (OnClassCondition)
          - @ConditionalOnClass classes found: javax.servlet.Servlet,org.springframework.web.multipart.support.StandardServletMultipartResolver (OnClassCondition)
          - @ConditionalOnBean (types: javax.servlet.MultipartConfigElement; SearchStrategy: all) found no beans (OnBeanCondition)
    
       WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#beanNameViewResolver
          - @ConditionalOnBean (types: org.springframework.web.servlet.View; SearchStrategy: all) found no beans (OnBeanCondition)
    
       WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#viewResolver
          - @ConditionalOnBean (types: org.springframework.web.servlet.View; SearchStrategy: all) found no beans (OnBeanCondition)
    
       WebSocketAutoConfiguration
          - required @ConditionalOnClass classes not found: org.springframework.web.socket.WebSocketHandler (OnClassCondition)
    

    Thanks

  • emilly
    emilly about 8 years
    can yo reply to stackoverflow.com/questions/35967143/…. Its same think but I am getting where is the issue ?