Fehler beim Konfigurieren einer DataSource: Das Attribut 'url' wurde nicht angegeben und es konnte keine eingebettete Datenquelle konfiguriert werden

109

Ich arbeite an einem Spring Boot Batch- Beispiel mit MongoDB und habe den mongodServer bereits gestartet .

Wenn ich meine Anwendung starte, wird der folgende Fehler angezeigt.

Irgendwelche Hinweise für dieses Problem?

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
    If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

application.properties:

# Mongo database URI. Cannot be set with host, port and credentials.
spring.data.mongodb.uri=mongodb://localhost/test 

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

Ich habe mongodmit folgender Ausgabe begonnen:

C:\Users\pc>mongod
2018-07-07T14:39:39.223+0530 I JOURNAL  [initandlisten] journal dir=C:\data\db\journal
2018-07-07T14:39:39.230+0530 I JOURNAL  [initandlisten] recover : no journal files present, no recovery needed
2018-07-07T14:39:39.478+0530 I JOURNAL  [durability] Durability thread started
2018-07-07T14:39:39.589+0530 I CONTROL  [initandlisten] MongoDB starting : pid=11992 port=27017 dbpath=C:\data\db\ 64-bit host=DESKTOP-NQ639DU
2018-07-07T14:39:39.589+0530 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2018-07-07T14:39:39.591+0530 I CONTROL  [initandlisten] db version v3.0.5
2018-07-07T14:39:39.592+0530 I CONTROL  [initandlisten] git version: 8bc4ae20708dbb493cb09338d9e7be6698e4a3a3
2018-07-07T14:39:39.592+0530 I CONTROL  [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
2018-07-07T14:39:39.592+0530 I CONTROL  [initandlisten] allocator: tcmalloc
2018-07-07T14:39:39.593+0530 I CONTROL  [initandlisten] options: {}
2018-07-07T14:39:39.595+0530 I JOURNAL  [journal writer] Journal writer thread started
2018-07-07T14:39:40.485+0530 I NETWORK  [initandlisten] waiting for connections on port 27017
2018-07-07T14:40:39.140+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51340 #1 (1 connection now open)
2018-07-07T14:40:41.663+0530 I NETWORK  [conn1] end connection 127.0.0.1:51340 (0 connections now open)
2018-07-07T14:45:12.421+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51578 #2 (1 connection now open)
2018-07-07T14:45:12.870+0530 I NETWORK  [conn2] end connection 127.0.0.1:51578 (0 connections now open)
2018-07-07T14:46:21.734+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51591 #3 (1 connection now open)
2018-07-07T14:46:22.041+0530 I NETWORK  [conn3] end connection 127.0.0.1:51591 (0 connections now open)
2018-07-07T14:57:47.523+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:52534 #4 (1 connection now open)
2018-07-07T14:57:47.910+0530 I NETWORK  [conn4] end connection 127.0.0.1:52534 (0 connections now open)

Geben Sie hier die Bildbeschreibung ein

Jeff Cook
quelle

Antworten:

74

Überprüfen Sie Ihre application.properties

Ändern

spring.datasource.driverClassName=com.mysql.jdbc.Driver

zu

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

arbeitete für mich. Vollständige Konfiguration:

spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=
spring.datasource.password=   
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update
jarosik
quelle
1
Wo ist die application.properties in intelij ide?
GhostDede
4
@ GhostDede bitte in src / main / resources / application.properties
Kayesh Parvez
Vielen Dank! Es hat mir geholfen herauszufinden, was in meinem Code vor sich geht.
Saxophonist
37

Füge einfach hinzu: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) funktioniert für mich.

Ich habe den gleichen Fehler erhalten, mit dem ich versucht @EnableAutoConfiguration(exclude=...)habe, hat nicht funktioniert.

Kumar Anand
quelle
36

Ihr Problem ist die Abhängigkeit von Spring Batch spring-boot-starter-batch, die eine spring-boot-starter-jdbctransitive Maven-Abhängigkeit aufweist.

Spring Batch ist ein Framework zum Erstellen zuverlässiger und fehlertoleranter Enterprise-Batch-Jobs. Es unterstützt viele Funktionen wie das Neustarten eines fehlgeschlagenen Stapels, das Aufzeichnen des Status der Stapelausführung usw. Um dies zu erreichen, verwendet Spring Batch ein Datenbankschema, um den Status der registrierten Jobs zu speichern. Die automatische Konfiguration bietet Ihnen bereits die Grundkonfiguration der erforderlichen Datenquelle. Für diese Konfiguration ist die relationale Datenbankkonfiguration erforderlich.

Um dies zu lösen , müssen Sie einige Datenbanktreiber umfassen wie mysql, h2etc. die konfigurieren url.

Update : Nur für den Einstieg können Sie Ihre application.yml wie folgt konfigurieren:

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:localhost;DB_CLOSE_ON_EXIT=FALSE
    username: admin
    password:

und natürlich in deinem pom.xmlInclude das h2 dirver wie folgt:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
       ....
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>

....
    </dependencies>
...

</project>

Die Motivation, da Sie Mongo nicht für diesen Zweck verwenden können, besteht darin, dass die Verwendung von Mongo nur für Artikelleser und -schreiber bereitgestellt wird und nicht für die Verwaltung der internen Datenbank von Spring Batch, bei der es sich um ein internes Schema und nicht um ein Geschäftsschema handelt. Die Abfrage ist eine einfache SQL-Abfrage und die interne Abstraktion basiert auf einer relationalen Datenbank. Es ist eine Datenbank mit ACID-Fähigkeit erforderlich, da jeder Stapel einen Teil der Arbeit liest und schreibt und diese Informationen speichert, um den Job neu zu starten. Eine NoSql-Lösung ist dafür nicht geeignet.

Am Ende haben Sie eine relationale Datenbank konfiguriert, um Spring Batch für interne Funktionen vorzubereiten. Die interne Abstraktion basiert nicht nur auf mongo, sondern auch auf jdbc. Dann kann Mongo aber für die geschäftliche Seite der Charge über Item Reader / Writer verwendet werden.

Ich hoffe, dass dies Ihnen helfen kann, Ihre Zweifel auszuräumen.

Valerio Vaudi
quelle
Dies ist meine Frage - Müssen wir immer noch H2 verwenden, wenn wir MongoDB verwenden? Ich habe H2 verwendet, aber das Problem ist immer noch dasselbe !!
Jeff Cook
Ich aktualisiere die Antwort. Ich habe einen einfachen Einstieg versucht und mit dieser Konfiguration funktioniert es. Ich kann meine Bewerbung starten
Valerio Vaudi
9
Sie können spring-jdbc von Ihrer Spring-Batch-Abhängigkeit ausschließen oder in der Anwendungsklasse das Laden der Datenquelle Bean ausschließen@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
TecHunter
Zeitverschwendung und unlogisch, h2 im Mongo-Projekt zu installieren. Diese Lösung hat bei mir funktioniert. @ValerioVaudi danke für die Klarheit
Arun3x3
25

Nicht auf den Punkt der Frage (kann allerdings in Beziehung gesetzt werden), aber, wenn Sie ein neues Projekt Bootstrap und fragen sich, warum Sie den gleichen Fehler machen, es von der kommen kann artifactIdvon spring-boot-starter-data-jpain dem Abhängigkeitsabschnitt. Ich habe die Abhängigkeit unten angegeben. Sie müssen die Datenbank definieren, um dies zu beseitigen.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Chaklader Asfak Arefe
quelle
4
In meinem Fall war es die Spring-Boot-Starter-Data-JDBC-Abhängigkeit, die ich in pom.xml kommentierte und das Problem verschwand! Ich denke, es wäre schön, diese Abhängigkeiten nur einzuschließen, wenn Sie den Treiber und andere Anmeldeinformationen bereit haben, die dann in application.properties aktualisiert werden können, damit das Projekt erfolgreich erstellt werden kann.
Raikumardipak
14

Ausgenommen die DataSourceAutoConfiguration.classfür mich bearbeiteten:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
runya
quelle
beste Lösung für nicht datenbankbasierte Anwendungen.
Doogle
10

Dieser Link hat geholfen.

Die automatische Spring Boot-Konfiguration versucht, Beans basierend auf den dem Klassenpfad hinzugefügten Abhängigkeiten automatisch zu konfigurieren. Und weil wir eine JPA-Abhängigkeit (Spring-Data-Starter-JPA) von unserem Klassenpfad haben, versucht es, sie zu konfigurieren.

Das Problem: Spring Boot verfügt nicht über alle Informationen, die zum Konfigurieren der JPA-Datenquelle, dh der JDBC-Verbindungseigenschaften, erforderlich sind. Lösungen:

  1. Geben Sie die JDBC-Verbindungseigenschaften an (am besten).
  2. Verschieben Sie die Bereitstellung von Verbindungseigenschaften, indem Sie einige AutoConfig-Klassen ausschließen (temporär - sollte eventuell entfernt werden).

Der obige Link schließt das DataSourceAutoConfiguration.classmit aus

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

Aber das hat bei mir nicht funktioniert. Ich musste stattdessen 2 AutoConfig-Klassen ausschließen:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, XADataSourceAutoConfiguration.class})
Bibangamba
quelle
Arbeitete für mich, aber ich verstand immer noch nicht, warum ich es explizit ausschließen muss
Saurabh Verma
hey @SaurabhVerma, ich habe die Antwort bearbeitet, um die Gründe für den Ausschluss der AutoConfigKlassen zu erläutern .
Bibangamba
Ohne nur DataSourceAutoConfigurationfür mich gearbeitet 2.2.1.RELEASEvon spring-boot-starter-parent.
user2918640
6

Fehler "Fehler beim Konfigurieren einer DataSource". Zuerst haben wir das Problem behoben, indem wir die Datenquelle definiert haben. Als Nächstes haben wir erläutert, wie Sie das Problem umgehen können, ohne die Datenquelle überhaupt zu konfigurieren.

https://www.baeldung.com/spring-boot-failed-to-configure-data-source

Roger Pc
quelle
Können Sie diese Antwort bitte erweitern?
Sterling Archer
1
Ich würde die Antwort lieber hier erklären.
Chaklader Asfak Arefe
Wenn Sie eine andere Methode zum Konfigurieren der Datenverbindung verwenden, verwenden Sie den folgenden Ausschluss in application.properties: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Anurag
4

Es kann sein, dass Ihr Ressourcenverzeichnis beim Erstellen eines Projekts über Spring Initializr nicht zum Klassenpfad hinzugefügt wird. Ihre Anwendung lädt also niemals die von Ihnen konfigurierte Datei application.properties.

Fügen Sie Ihrer Datei application.properties Folgendes hinzu, um einen schnellen Test durchzuführen, wenn dies der Fall ist:

server.port=8081

Wenn Sie nun Ihre Anwendung ausführen, sollten Sie in der Ausgabe der Spring Boot Console Folgendes sehen:

INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): **8081** (http) with context path ''

Wenn Ihr Port immer noch Standard 8080 ist und nicht in 8081 geändert wurde, werden Ihre application.properties-Dateien offensichtlich nicht geladen.

Sie können auch über die gradle bootRunBefehlszeile überprüfen, ob Ihre Anwendung ausgeführt wird. Welches wird höchstwahrscheinlich Arbeit sein.

Lösung:

  1. Schließen Sie IntelliJ und löschen Sie in Ihrem Projektordner den Ordner ".idea"
  2. Importieren Sie Ihr Projekt erneut wie folgt in IntelliJ: "Projekt importieren" -> "Wählen Sie NUR Ihre zu importierende build.gradle-Datei aus". (IntelliJ übernimmt automatisch den Rest)
  3. Erstellen Sie Ihre Anwendung und führen Sie sie erneut aus

Siehe offizielle Antwort des IntelliJ-Supports: IDEA-221673

Flavio Caduff
quelle
Für mich war es genug, mit der rechten Maustaste auf den Ordner Ressourcen zu klicken und "Verzeichnis als" markieren -> "Ressourcenstamm" zu wählen.
Balazs F.
3

Für Spring Boot Version 2.X.Xunten Konfiguration hat bei mir funktioniert.

spring.datasource.url=jdbc:mysql://localhost:3306/rest
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update 

Der alte JDBC-Treiber ist veraltet. Die neue ist in der obigen Konfiguration erwähnt. Bitte verwenden Sie das gleiche und starten Sie das Projekt neu.

Vinod
quelle
2

Ich hatte das gleiche Problem durch Hinzufügen gelöst <scope>provided</scope>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <scope>provided</scope>
        </dependency>

Quelle: https://github.com/spring-projects/spring-boot/issues/13796#issuecomment-413313346

Zakhar Telyatnikov
quelle
2

Ich habe diese Anmerkung zur Hauptklasse meiner Spring Boot-Anwendung hinzugefügt und alles funktioniert perfekt

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
Eric Ampire
quelle
2

Es kann sein, dass Sie jpa-Abhängigkeiten und Plugins haben ...

Kommentieren Sie es einfach, wenn Sie es nicht verwenden (build.gradle oder pom file)

z.B

// kotlin("plugin.jpa") version "1.3.61"

// implementation("org.springframework.boot:spring-boot-starter-data-jpa")
virus_dmk
quelle
1

Es bedeutet einfach, dass Sie einen Spring Starter Code mit Datenbankabhängigkeit heruntergeladen haben, ohne Ihre Datenbank zu konfigurieren. Es weiß also nicht, wie es sich verbinden soll. 2.18Führen Sie für die Spring-Boot-Version die folgenden Schritte aus, um das Problem zu beheben.

  1. Erstellen Sie eine Datenbank für den Treiber, den Sie heruntergeladen haben, z mysql/mongo.
  2. Fügen Sie in Ihrer applications.propertiesDatei die Datenbankverbindungsinformationen hinzu. Beispiel wird gegeben, mysqlwenn Ihre Datenbank mongoes für ändert mongo.

    spring.datasource.url=jdbc:mysql://localhost:3306/db_name_that_you_created spring.datasource.username=your_db_username_here spring.datasource.password=your_db_pass_here spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto = update

  3. Starten Sie den Server neu, der ausgeführt werden soll.
Krishnadas PC
quelle
1

Wenn die Datenquelle in definiert ist application.resources, stellen Sie sicher, dass sie sich direkt unter befindet, src/mainund fügen Sie sie dem Erstellungspfad hinzu.

Tadele Ayelegn
quelle
1

Wenn Sie Gradle verwenden, kann die Neuerstellung von Gradle dieses Problem lösen.

logbasex
quelle
1

Wenn Ihre pom.xml eine JPA-Abhängigkeit enthält, entfernen Sie diese einfach. Diese Lösung hat bei mir funktioniert.

Akansha Singh
quelle
0

Es passiert, weil das @ valerio-vaudi sagte.

Ihr Problem ist die Abhängigkeit von Spring Batch Spring-Boot-Starter-Batch, die eine transitive Maven-Abhängigkeit von Spring-Boot-Starter-JDBC hat.

Sie können es jedoch auflösen und die primäre Datenquelle mit Ihrer Konfiguration festlegen

 @Primary
 @Bean(name = "dataSource")
 @ConfigurationProperties(prefix = "spring.datasource")
 public DataSource getDataSource() {
      return DataSourceBuilder.create().build();
 }

 @Bean
 public JdbcTemplate jdbcTemplate(DataSource dataSource) {
      return new JdbcTemplate(dataSource);
 }
bpedroso
quelle
0

Ich hatte das gleiche Problem und habe alle oben genannten Vorschläge ausprobiert, aber es hat nicht geklappt. Ich poste meine Antwort für zukünftige Leser. Vorher hat es gut funktioniert, aber irgendwie ist es wieder aufgetaucht. Ich habe dieses Problem behoben, indem ich einige unnötige Plugnins und Abhängigkeiten aus pom.xml entfernt habe

  1. Zunächst habe ich den Standardverpackungstyp in jar geändert (Spring Boot Initializer gibt pom in der Verpackung an).

    <packaging>jar</packaging>

  2. Ich habe unbeabsichtigt einige Plugins hinzugefügt:

    <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <attachClasses>true</attachClasses> <webXml>target/web.xml</webXml> <webResources> <resource> <directory>src/main/webapp</directory> <filtering>true</filtering> </resource> </webResources> </configuration> </plugin>

Ich hoffe meine Antwort wird jemandem helfen.

Doston
quelle
0

Dieser hat bei mir für MySQL funktioniert: (Anwendungseigenschaften)

spring.datasource.url=jdbc:mysql://localhost:3306/db?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&
useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=admin
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
Rogol
quelle
0

Ich habe eine veraltete Abhängigkeit von mybatis in der Datei pom.xml entfernt, um meine zum Laufen zu bringen.

SauerTrout
quelle
0

Fügen Sie diese Anmerkung in die Java-Hauptdatei ein

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
James Siva
quelle
0

Wenn Sie in pom.xml die Abhängigkeit "spring-boot-startup-data-jpa" hinzugefügt haben, fügen Sie bitte die entsprechende Datenbank in Abhängigkeit wie h2 usw. hinzu.

Akshay Kenjale
quelle
0

Für mich wurde der Ressourcenordner bei einem Maven-Update / Build ausgeschlossen. Ich ging zu Build Path> Source und stellte fest, dass src / main / resources "Excluded **" hat. Ich habe diesen Eintrag entfernt (Klicken Sie auf Ausgeschlossen **> Entfernen> Übernehmen und schließen).

Dann hat es gut funktioniert.

Geben Sie hier die Bildbeschreibung ein

Deb
quelle
-1

Ich denke, wenn Sie Module importieren, haben Sie ein anderes Paket importiert. Gehen Sie zu Modulen und entfernen Sie alle. Danach importieren Sie Module aus dem Paket des Projekts

mike.murad.you
quelle
-3

Durch Hinzufügen einer h2-Abhängigkeit zur pom-Datei können solche Probleme behoben werden. ...... com.h2database h2 ......

Girma Duresso
quelle
Bedeckt durch bestehende Antwort
Karl Richter
-8

In meinem Fall

spring.profiles = production // remove it to fix

in application.properties war der Grund

Basilikum
quelle
5
nicht verwandt, zu spezifisch. Ihre Hauptkonfiguration war höchstwahrscheinlich auf das productionProfil beschränkt, sodass die Aktivierung dieses Profils auch Ihr Problem gelöst hätte. Das Problem hier ist eine fehlende spring.datasourceKonfiguration in der aktiven Konfiguration
TecHunter