wake-up-neo.com

Spring Boot - Fehler beim Erstellen einer Bean mit dem Namen 'dataSource', die in der Klassenpfadressource definiert ist

Ich habe eine Spring Boot-Webanwendung. Im Mittelpunkt steht der RESTful-Ansatz. Die gesamte Konfiguration scheint vorhanden zu sein, aber aus irgendeinem Grund kann MainController die Anfrage nicht verarbeiten. Es ergibt sich ein Fehler 404. Wie man es repariert?

@Controller
public class MainController {

    @Autowired
    ParserService parserService;

    @RequestMapping(value="/", method= RequestMethod.GET)
    public @ResponseBody String displayStartPage(){
        return "{hello}";
    }
}

Bewerbung

@Configuration
@ComponentScan(basePackages = "")
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer{
        public static void main(final String[] args) {
            SpringApplication.run(Application.class, args);
        }

        @Override
        protected final SpringApplicationBuilder configure(final SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }
}

ParserController

@RestController
public class ParserController {

    @Autowired
    private ParserService parserService;

    @Autowired
    private RecordDao recordDao;

 private static final Logger LOG = Logger.getLogger(ParserController.class);

    @RequestMapping(value="/upload", method= RequestMethod.POST)
    public @ResponseBody String fileUploadPage(
   }
}

UPDATE

Scheint, als könnte MySQL nicht durch Spring initialisiert werden.

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; 

nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; 

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; 

nested exception is 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.

UPDATE2

application.properties

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

spring.jpa.database = MYSQL
spring.jpa.show-sql = true

# Hibernate
hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql: true
hibernate.hbm2ddl.auto: update
entitymanager.packagesToScan: /

UPDATE4

Scheint, dass Lite-Controller nicht reagieren, obwohl @RequestMapping eingestellt ist. Warum könnte es sein?

PS. Es tritt auf, wenn ich Maven Lebenszyklus test..__ laufe. Wenn Sie in IntelliJ im Degub-Modus arbeiten, wird kein Fehler ausgegeben.

UPDATE5

Ich benutze auch diesen DAO wie im Tutorial erklärt ....

public interface RecordDao extends CrudRepository<Record, Long> {
}

http://blog.netgloo.com/2014/10/27/using-mysql-in-spring-boot-via-spring-data-jpa-and-hibernate/

UPDATE6

Ich habe meine Anwendungseigenschaften geändert. Und probierte jede einzelne Kombination aus, aber sie arbeitet nicht. (

Maven-Ausgabe:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running IntegrationTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.365 sec <<< FAILURE! - in IntegrationTest
saveParsedRecordsToDatabase(IntegrationTest)  Time elapsed: 2.01 sec  <<< ERROR!
Java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.Java:99)
    at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.Java:101)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.Java:109)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.Java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.Java:331)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.Java:213)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.Java:290)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.Java:292)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.Java:233)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.Java:87)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:229)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.Java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.Java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.Java:309)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.Java:176)
    at org.Apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.Java:264)
    at org.Apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.Java:153)
    at org.Apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.Java:124)
    at org.Apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.Java:200)
    at org.Apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.Java:153)
    at org.Apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.Java:103)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; nested exception is 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.
45
J.Olufsen

Sieht so aus, als ob das anfängliche Problem bei der automatischen Konfiguration liegt.

Wenn Sie die Datenquelle nicht benötigen, entfernen Sie sie einfach aus dem Autokonfigurationsprozess:

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
75
Jason Warner

Wie es aussieht, haben Sie nicht genügend Daten an Spring Boot übergeben, um die Datenquelle zu konfigurieren

Erstellen Sie/in Ihrem vorhandenen application.properties fügen Sie Folgendes hinzu

spring.datasource.driverClassName=
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

stellen Sie sicher, dass Sie einen Wert für jede Eigenschaft anhängen.

15
Alan Barrows

Möglicherweise haben Sie den MySQL-JDBC-Treiber vergessen.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>5.1.34</version>
</dependency>
10
gcgan

Ich bekam den gleichen Fehler und stellte fest, dass einige Abhängigkeiten in meiner pom.xml fehlten, wie die von Spring JPA, Hibernate, Mysql oder vielleicht jackson. Stellen Sie also sicher, dass in Ihrem pom keine Abhängigkeiten fehlen .xml und überprüfen Sie die Versionskompatibilität.

<!-- Jpa and hibernate -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.3.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-Java</artifactId>
            <version>5.1.6</version>
        </dependency>
5
Gaurav Anand

Die hibernate.*-Eigenschaften sind nutzlos. Sie sollten spring.jpa.*-Eigenschaften sein. Ganz zu schweigen davon, dass Sie versuchen, die bereits festgelegten Einstellungen mit den spring.jpa.*-Eigenschaften zu überschreiben. (Zur Erklärung jeder Eigenschaft empfehle ich dringend, das Spring Boot reference guide zu lesen.

spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql = true

# Hibernate
spring.jpa.hibernate.ddl-auto=update

Die zu durchsuchenden Pakete werden automatisch basierend auf dem Basispaket Ihrer Application-Klasse erkannt. Wenn Sie etwas anderes angeben möchten, verwenden Sie die Annotation @EntityScan. Auch das Angeben des Pakets mit den höchsten Werten ist nicht wirklich sinnvoll, da der gesamte Klassenpfad durchsucht wird, was die Leistung stark beeinträchtigt.

4
M. Deinum

Wenn Sie application.properties in der Spring-Boot-App verwenden, fügen Sie einfach die folgende Zeile in application.properties ein und es sollte funktionieren:
spring.datasource.url: jdbc: mysql: // google /? cloudSqlInstance = & socketFactory = com.google.cloud.sql.mysql.SocketFactory & user = **** & password = ****

2

Dieses Problem tritt auf, während Sie Test ausführen. Abhängigkeiten hinzufügen 

testCompile group: 'com.h2database', name: 'h2', version: '1.4.197' 

Ordnerressourcen unter Testquelle hinzufügen Fügen Sie die Datei bootstrap.yml Hinzu und stellen Sie den Inhalt bereit.

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:h2:mem:TEST
    driver-class-name: org.h2.Driver
    username: username
    password: password
    hikari:
      idle-timeout: 10000

dadurch wird Ihre Datenquelle eingerichtet.

2
Kumar Abhishek

unter der Codezeile ändern

spring.datasource.driverClassName

zu

spring.datasource.driver-class-name
2
user6536363

Ich war mit diesem Problem konfrontiert, nachdem ich alle erforderlichen Eigenschaften der Datenquelle in application.properties angegeben hatte. Dann wurde mir klar, dass die Eigenschaftskonfigurationsklasse nicht von Spring Boot geprüft wurde, da sie sich im Vergleich zu meiner Spring Boot-Anwendung.Java in einer anderen Pakethierarchie befand und daher keine Eigenschaften auf das Datenquellenobjekt angewendet wurden. Ich habe den Paketnamen meiner Eigenschaftenkonfigurationsklasse geändert, und es begann zu arbeiten. 

1
Mahesh Japkar

In meinem Fall war dies der Fall, weil org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource ein automatisch verwendbares Feld ohne Qualifier ist und ich mehrere Datenquellen mit qualifizierten Namen verwende. Ich habe dieses Problem gelöst, indem ich @Primary beliebig in einer meiner DataSource-Bean-Konfigurationen verwendet habe

@Primary
@Bean(name="oneOfManyDataSources")
public DataSource dataSource() { ... }

Ich nehme an, Sie möchten AbstractRoutingDataSource implementieren, und dann funktioniert diese automatische Konfiguration nur, da kein Qualifier erforderlich ist. Sie verfügen lediglich über eine einzige Datenquelle, die es Ihren Beans ermöglicht, bei Bedarf die entsprechende DataSource aufzulösen. Dann brauchen Sie die Annotationen @Primary oder @Qualifier überhaupt nicht, weil Sie nur eine einzige DataSource haben.

Auf jeden Fall hat meine Lösung funktioniert, weil meine Beans DataSource nach Qualifier angeben und der JPA-Autokonfekt zufrieden ist, da er eine einzige primäre DataSource hat. Ich empfehle dies keinesfalls als "richtige" Vorgehensweise, aber in meinem Fall wurde das Problem schnell gelöst und das Verhalten meiner Bewerbung nicht merklich beeinträchtigt. Ich werde hoffentlich eines Tages die AbstractRoutingDataSource implementieren und alle Beans umgestalten, die eine bestimmte DataSource benötigen. Dann ist dies vielleicht eine bessere Lösung.

1
AdrianVeidt

Überprüfen Sie, ob Sie über eine Datenbankabhängigkeit bei runtime group unter build.gradle verfügen

runtime group: 'com.h2database', name: 'h2', version: '1.4.194'

oder ändern Sie den Gültigkeitsbereich von test in Runtime , wenn Sie Maven verwenden

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.194</version>
    <scope>runtime</scope>
</dependency>
1
Alexander P.

Nicht direkt auf die ursprüngliche Frage bezogen, aber dies wird für jemanden nützlich sein. Dieser Fehler ist mir bei einer einfachen Zwei-Projekt-Struktur aufgefallen. Ein Projekt handhabte einige Datenbankoperationen mit spring jdbc (A), und das andere hatte überhaupt keine Jdbc-Operationen (B). Dieser Fehler ist jedoch immer noch aufgetreten, als ich Service B startete. Die Datenquelle sollte ordnungsgemäß initialisiert werden.

Als ich herausfand, hatte ich diese Abhängigkeit zum übergeordneten Pom der beiden Module hinzugefügt

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

Dies veranlaßte spring, die jdbc-Abhängigkeiten auch für das Projekt B zu initialisieren. Also bewegte ich es, um A's Pom zu pressen, alles war gut.

Hoffe das würde jemandem helfen

1
Isuru Ranaweera

In meinem Fall habe ich in der Datei application.properties Folgendes einfach ignoriert:

# Überwintern

# spring.jpa.hibernate.ddl-auto = update

Für mich geht das....

0
ram kumar

Führen Sie die Anwendung als Glas aus? (Java-Jar xxxx.jar)

Wenn ja, haben Sie die Datei application.properties in diesem Behälter gespeichert?

Wenn nein, versuchen Sie herauszufinden, warum:

  • Um automatisch in das jar-Paket gepackt zu werden, können die Dateien wie folgt lauten: src/main/resources/application.properties
  • Das Maven-Plugin in der pom.xml kann ebenfalls konfiguriert werden
0
Remy Mellet

Ich habe mein Problem mit der Änderung der übergeordneten Spring Boot-Abhängigkeit gelöst.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
</parent>

zu

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.6.RELEASE</version>
</parent>

Weitere Informationen finden Sie in den Versionshinweisen: Spring Boot 2.1.0 Versionshinweise

0
Guchelkaben

Es hat für mich funktioniert, Sie können versuchen, Ihre: Fügen Sie dies zu VM - Optionen in Tomcat hinzu

-DdevBaseDir="C:\Your_Project_Dir_Path"
0
kazim

Ich war seit mehreren Tagen mit demselben Problem konfrontiert, und schließlich liegt das Problem nicht im Code. Das Problem wird von maven verursacht. Sie müssen alle Dateien löschen, die er von Ihrer Festplatte heruntergeladen hat. "C:\Users\username.m2\Repository "und führen Sie einen weiteren Update-Maven für Ihr Projekt durch, der Ihr Problem beheben wird.

0

Wenn Sie diese Art von Fehler feststellen, können Sie keine Bean-Datenquelle in einem Testfall erstellen.

Es kann verschiedene Gründe haben:

  1. Keine Datenquelle, Sie müssen Ihre Datenquelle, h2-In-Memory-Datenquelle oder was auch immer erstellen, oder Sie können den Weg wie exclude={datasource··} wählen.
  2. Sie haben Ihre Datenquelle wie MySQL, aber sie funktioniert immer noch nicht. Es wurde von der Klasse AutoConfigureTestDatabase verursacht. Es wird eine Datenquelle für Sie ausgewählt, die Mehrdeutigkeiten verursachen kann.

Lösung: Fügen Sie @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) hinzu, um zu vermeiden, dass die Standarddatenquelle ersetzt wird.

0
tyrantqiao