Spring Boot-jdbc-datasource-Autokonfiguration fehlschlägt, auf standalone-tomcat
Während Sie versuchen, bereitstellen und starten eine spring-boot-Anwendung, die auf einem standalone tomcat (7) Instanz, wir lief in ein Problem waren die automatisch konfigurierte Frühjahr datasource-bean nicht gefunden und die entsprechende exception wird geworfen:
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
Den einfachen jdbc-spring.Datenquelle richtig konfiguriert ist und in der Anwendung.die Eigenschaften und die Anwendung selbst läuft perfekt mit einem eingebetteten tomcat-Instanz als eigenständige spring-boot-Anwendung.
Es scheint, als ob die Anwendung.Eigenschaften Datei kann nicht gelesen werden und/oder verarbeitet richtig, oder die Injektion von einige andere-Bohnen (ein service in einem REST-controller zum Beispiel) wird ausgelöst, bevor Sie die datasource-Autokonfiguration durchgeführt wurde.
Ist keine extra Konfiguration erforderlich, wenn Sie nicht mit einem embedded tomcat?
Oder hat das jemand laufen in ähnliche Probleme?
Die einfache Anwendung und Konfiguration:
@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);
}
}
Anwendung.Eigenschaften:
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driverClassName=com.mysql.jdbc.Driver
Datasource Beispiel:
@Repository
public class MyRepositoryImpl implements MyRepository {
@Autowired
private DataSource dataSource;
...
}
Pom Eltern & Abhängigkeiten:
<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>
Automatische Konfiguration report von gescheiterten 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)
Dank
- Haben Sie enthalten so etwas wie <util:Eigenschaften id="Requisiten" location="classpath: - Anwendung.Eigenschaften" /> in Ihrem Anwendungskontext. Und könnten Sie sagen, wo genau haben Sie die Anwendung.Eigenschaften. Es sollte in der Regel irgendwo vorhanden sein, wie src/main/resources
- spring-boot-Autokonfiguration sollte ausdrücklich den Import Eigenschaften obsolet (und die Anwendung funktioniert gut, wenn ich es standalone) und Anwendung.Eigenschaften in der Tat ist in src/main/resources Ordner
- Poste bitte deine Konfigurationsdateien. Das würde es viel einfacher machen, um es herauszufinden!
- die meisten (wenn nicht alle) - Konfiguration, die eingerichtet ist, spring boot durch Autokonfiguration und-Komponente Scannen. Die datasource ist autowired in einem Beispiel-repository vor.
- Könnte Sie buchen den Abhängigkeiten Hinzugefügt in Ihre pom und die Ausgabe der Autokonfiguration durchgeführt von boot?
- Hinzugefügt Abhängigkeiten und Ausgang auf die Frage
- Es funktioniert für mich. Kannst du den code z.B. auf github?
- Ich werde versuchen, ein Beispiel-Projekt mit dem problem irgendwo in dieser Woche. Vielen Dank im Voraus für Eure Hilfe!
- Hallo Dave, könnte diese verknüpft werden, um stackoverflow.com/questions/20667653/... ?
- Ich habe ein Beispiel Projekt auf github, das hat den gleichen NoSuchBeanException nach der Bereitstellung des Krieges zu tomcat und starten Sie die Anwendung. (die Feder datasource-Eigenschaften sind dummies in der Beispiel, aber das sollte keine Rolle spielen für dieses Beispiel).
- Ow, und der url 🙂 github.com/vandammeb/spring-boot-example
- Gleichen Fehler mit der 0.5.0.M6 und Tomcat 7.0.42. Scheint zu funktionieren mit der 0.5.0.M7-version und Tomcat 7.0.47 obwohl.
- wo ist Ihre datasource-Definition? Ich denke, dass dieser Fehler bedeutet, dass der Frühling nicht finden können, bean namens "dataSource" für MyRepositoryImpl.
- Spring Boot schafft die datasource automatisch basierend auf dem Namen der Eigenschaft. Es besteht keine Notwendigkeit zum definieren der Datenquelle manuell.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist wahrscheinlich ein Problem mit der 0.5.0.M6-version und der Tomcat-version, die Sie verwenden. Es funktioniert mit Spring Boot 0.5.0.M7 und Tomcat 7.0.47.
Hallo stellen Sie sicher, dass Sie nicht fehlen in der JPA-Bibliothek.
Arbeitete für mich für die version 1.3.3
War ich vor dem gleichen Problem früher und war gleich gelöst, indem
in Application.java
Hoffe, das hilft
Für mich war es das auslösen der Ausnahme in JdbcTemplateAutoConfiguration. Ich fügte hinzu, ausschließen JdbcTemplateAutoConfiguration in der Application.java.
Hoffe, es hilft.