Échec de la configuration d'un DataSource: l'attribut 'url' n'est pas spécifié et aucune source de données intégrée n'a pu être configurée

123

Je travaille sur un exemple de Spring Boot Batch avec MongoDB et j'ai déjà démarré le mongodserveur.

Lorsque je lance mon application, j'obtiens l'erreur ci-dessous.

Des pointeurs pour ce problème?

***************************
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>

J'ai commencé mongodavec la sortie suivante:

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)

entrez la description de l'image ici

Jeff Cook
la source

Réponses:

83

vérifiez votre application.properties

en changeant

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

à

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

travaillé pour moi. Configuration complète:

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
la source
1
Où se trouve l'application.properties dans intelij ide?
GhostDede
5
@GhostDede veuillez vérifier dans src / main / resources / application.properties
kayesh parvez
Merci! Cela m'a aidé à comprendre ce qui se passe sur mon code.
Saxophonist le
56

Ajoutez simplement: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) ça marche pour moi.

J'obtenais la même erreur avec laquelle j'ai essayé @EnableAutoConfiguration(exclude=...)ne fonctionnait pas.

Kumar Anand
la source
Fonctionne parfaitement lorsque je sais que j'ai besoin d'utiliser le DataSource à un moment donné mais que je n'en ai pas besoin immédiatement.
alex
travaillé pour moi aussi.
sak
39

Votre problème est la dépendance de spring batch spring-boot-starter-batchqui a une spring-boot-starter-jdbcdépendance transitive maven.

Spring Batch est un framework permettant de créer des jobs batch d'entreprise fiables et tolérants aux pannes. Il prend en charge de nombreuses fonctionnalités telles que le redémarrage d'un lot ayant échoué, l'enregistrement de l'état de l'exécution du lot, etc. Pour ce faire, Spring Batch utilise un schéma de base de données pour stocker l'état des travaux enregistrés, la configuration automatique vous fournit déjà la configuration de base de la source de données requise et c'est cette configuration qui nécessite la configuration de la base de données relationnelle.

Pour résoudre ce problème , vous devez inclure un pilote de base de données comme mysql, h2, etc. pour configurer url.

Mise à jour : Juste pour commencer, vous pouvez configurer votre application.yml comme ci-dessous:

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

et bien sûr dans votre pom.xmlincluez le dirver h2 comme ceci:

<?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>

La motivation, car vous ne pouvez pas utiliser mongo à cette fin, est que l'utilisation de mongo est fournie uniquement pour les lecteurs et les rédacteurs d'articles et non pour la gestion de la base de données interne de Spring Batch qui est un schéma interne, pas un schéma métier. La requête est une simple requête SQL et l'abstraction interne repose sur une base de données relationnelle. Il est nécessaire d'avoir une base de données avec la capacité ACID car chaque lot lit et écrit une partie du travail et enregistre ces informations afin de redémarrer le travail. Une solution NoSql ne convient pas pour cela.

À la fin, vous avez configuré une base de données relationnelle afin de préparer Spring Batch pour la capacité interne, l'abstraction interne ne repose pas uniquement sur mongo sur jdbc. Ensuite, mongo peut être utilisé mais pour le côté commercial du lot via le lecteur / rédacteur d'articles.

J'espère que cela pourra vous aider à dissiper vos doutes.

Valerio Vaudi
la source
C'est ma question - Nous devons toujours utiliser H2 si vous utilisez MongoDB? J'ai utilisé H2 mais le problème est toujours le même !!
Jeff Cook
Je mets à jour la réponse. J'ai essayé un simple démarrage et avec cette configuration cela fonctionne. Je peux démarrer ma candidature
Valerio Vaudi
9
vous pouvez exclure spring-jdbc de votre dépendance spring-batch ou dans la classe d'application exclure le chargement du bean de source de données@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
TecHunter
perte de temps et illogique pour installer h2 dans le projet mongo. cette solution a fonctionné pour moi .. @ValerioVaudi merci pour la clarté
Arun3x3
26

Pas au point de la question (peut être liée bien), mais, si vous bootstrap un nouveau projet et se demandant pourquoi vous obtenez la même erreur, il peut provenir de la artifactIdde spring-boot-starter-data-jpala section de dépendance. J'ai donné la dépendance ci-dessous. Vous devrez définir la base de données pour vous en débarrasser.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Dead Pool
la source
4
Dans mon cas, c'était la dépendance spring-boot-starter-data-jdbc que j'ai commentée dans pom.xml et le problème a disparu! Je suppose que ce serait bien d'inclure ces dépendances uniquement si vous avez le pilote et d'autres informations d'identification prêts qui peuvent ensuite être mis à jour dans application.properties pour que le projet soit construit avec succès.
raikumardipak
J'ai rencontré un problème similaire décrit ici. Je jouais avec JPA plutôt que d'utiliser directement Mongo, j'ai donc ajouté la dépendance ci-dessus (via Intellij). J'ai décidé que je n'aimais pas la méthode JPA, alors je l'ai commentée à partir du pom.xml . C'est à ce moment-là que j'ai dû commencer à obtenir l'erreur notée dans la question en haut. J'avais besoin d'exécuter un mvn clean installpuis de recharger tous les projets Maven d'Intellij pour me débarrasser de l'erreur.
Mike
14

À l'exclusion du DataSourceAutoConfiguration.classtravaillé pour moi:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
runya
la source
meilleure solution pour une application non basée sur une base de données.
Doogle le
10

Ce lien a aidé.

La configuration automatique de Spring Boot tente de configurer automatiquement les beans en fonction des dépendances ajoutées au chemin de classe. Et comme nous avons une dépendance JPA (spring-data-starter-jpa) sur notre chemin de classe, il essaie de le configurer.

Le problème: Spring boot ne dispose pas de toutes les informations nécessaires pour configurer la source de données JPA, c'est-à-dire les propriétés de connexion JDBC. Solutions:

  1. fournir les propriétés de connexion JDBC (meilleur)
  2. reporter la fourniture des propriétés de connexion en excluant certaines classes AutoConfig (temporaire - devrait être supprimée éventuellement)

Le lien ci-dessus exclut le DataSourceAutoConfiguration.classavec

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

Mais cela n'a pas fonctionné pour moi. Au lieu de cela, j'ai dû exclure 2 classes AutoConfig:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, XADataSourceAutoConfiguration.class})
Bibangamba
la source
A travaillé pour moi mais je n'ai toujours pas compris pourquoi je dois l'exclure explicitement
Saurabh Verma
hé @SaurabhVerma, j'ai édité la réponse pour expliquer la justification de l'exclusion des AutoConfigclasses.
bibangamba
Excluant seulement DataSourceAutoConfigurationtravaillé pour moi sur 2.2.1.RELEASEde spring-boot-starter-parent.
user2918640
7

Erreur «Impossible de configurer une source de données». Tout d'abord, nous avons résolu le problème en définissant la source de données. Ensuite, nous avons expliqué comment contourner le problème sans configurer du tout la source de données.

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

Roger Pc
la source
Pouvez-vous développer cette réponse s'il vous plaît?
Sterling Archer
1
Je préfère expliquer la réponse ici.
Deadpool
Si vous utilisez une autre méthode pour configurer la connexion de données, utilisez l'exclusion suivante dans application.properties: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Anurag
4

Il se peut que votre répertoire de ressources ne soit pas ajouté au classpath lors de la création d'un projet via Spring Initializr. Ainsi, votre application ne charge jamais le fichier application.properties que vous avez configuré.

Pour faire un test rapide si tel est le cas, ajoutez ce qui suit à votre fichier application.properties:

server.port=8081

Maintenant, lors de l'exécution de votre application, vous devriez voir dans la sortie de la console Spring Boot quelque chose comme ceci:

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

Si votre port est toujours par défaut 8080 et non modifié en 8081, vos fichiers application.properties ne se chargent évidemment pas.

Vous pouvez également vérifier si votre application s'exécute avec à gradle bootRunpartir de la ligne de commande. Ce qui fonctionnera probablement.

Solution:

  1. Fermez IntelliJ, puis dans votre dossier de projet, supprimez le dossier ".idea"
  2. Réimportez votre projet dans IntelliJ comme suit: "Importer un projet" -> "sélectionnez UNIQUEMENT votre fichier build.gradle à importer". (IntelliJ récupérera automatiquement le reste)
  3. compilez et exécutez à nouveau votre application

Voir la réponse officielle du support IntelliJ: IDEA-221673

Flavio Caduff
la source
Pour moi, il suffisait de faire un clic droit sur le dossier Resources, et de choisir "Mark directory as" -> "Resources Root".
Balazs F.
3

Pour la version Spring Boot 2.X.Xci-dessous, la configuration a fonctionné pour moi.

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 

L'ancien pilote jdbc est obsolète. Le nouveau est mentionné sur la configuration ci-dessus. Veuillez utiliser le même et redémarrer le projet.

Vinod
la source
2

J'ai eu le même problème résolu en ajoutant <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>

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

za-ek
la source
2

J'ai ajouté cette annotation sur la classe principale de mon application Spring Boot et tout fonctionne parfaitement

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
Eric Ampire
la source
vous avez indiqué où vous avez mis l'extrait, donc +1
Setmax
2

Cela peut être dû au fait que vous avez des dépendances et des plugins jpa ...

il suffit de le commenter s'il n'est pas utilisé (fichier build.gradle ou pom)

par exemple

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

// implementation("org.springframework.boot:spring-boot-starter-data-jpa")
virus_dmk
la source
2

Si vous utilisez Gradle, la reconstruction de Gradle peut résoudre ce problème.

logbasex
la source
Wow, cela a résolu le problème pour moi. Et j'oublie toujours la solution.
GGrec il y a
1

Cela signifie simplement que vous avez téléchargé un code de démarrage Spring avec une dépendance de base de données sans configurer votre base de données. Donc, il ne sait pas comment se connecter. Pour la version Spring Boot, 2.18suivez les étapes ci-dessous pour le réparer.

  1. Créez une base de données pour le pilote que vous avez téléchargé, c'est-à-dire, mysql/mongoetc.
  2. Dans votre applications.propertiesfichier, ajoutez les informations de connexion à la base de données. Un échantillon est donné mysqlsi votre base de données est mongomodifiée pour 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. Redémarrez le serveur qu'il exécutera.
PC Krishnadas
la source
1

Si la source de données est définie dans application.resources, assurez-vous qu'elle se trouve juste en dessous src/mainet ajoutez-la au chemin de génération.

Tadele Ayelegn
la source
1

Si vous avez une dépendance JPA dans votre pom.xml, supprimez-la simplement. Cette solution a fonctionné pour moi.

Akansha Singh
la source
1

Ajoutez cette annotation dans le fichier java principal

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

Cela se produit parce que le @ valerio-vaudi a dit.

Votre problème est la dépendance de spring batch spring-boot-starter-batch qui a une dépendance maven transitive spring-boot-starter-jdbc.

Mais vous pouvez le résoudre en définissant la source de données principale avec votre configuration

 @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
la source
0

J'ai eu le même problème et j'ai essayé toutes les suggestions ci-dessus, mais cela n'a pas fonctionné. Je publie ma réponse pour les lecteurs futurs. Avant, cela fonctionnait bien, mais il est réapparu. J'ai résolu ce problème en supprimant certains plug-ins et dépendances inutiles de pom.xml

  1. Tout d'abord, j'ai changé le type d'emballage par défaut en jar (Spring Boot Initializer donne pom dans l'emballage)

    <packaging>jar</packaging>

  2. J'ai ajouté involontairement des plugins:

    <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>

J'espère que ma réponse aidera quelqu'un.

Doston
la source
0

Celui-ci a fonctionné pour moi, pour MySQL: (Propriétés de l'application)

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
la source
0

J'ai supprimé une dépendance obsolète sur mybatis dans le pom.xml pour faire fonctionner le mien.

SauerTruite
la source
0

Si vous avez ajouté la dépendance "spring-boot-starter-data-jpa" dans pom.xml, veuillez ajouter la base de données respective dans la dépendance comme h2 et etc.

akshay kenjale
la source
0

Je rencontre la même erreur lors du démarrage d'un nouveau projet. Utiliser la ligne de commande fonctionne pour moi.

./gradlew bootRun
Ninja
la source
-1

Je pense que lors de l'importation de modules, vous avez importé un autre package, allez dans les modules et supprimez-en tous. Après cela, importez les modules du package du projet

mike.murad.you
la source
-1

Pour moi, le dossier de ressources était exclu lors d'une mise à jour / build maven. Je suis allé à Build Path> Source et j'ai trouvé que src / main / resources avait "Excluded **". J'ai supprimé cette entrée (cliqué sur Exclus **> Supprimer> Appliquer et fermer).

Ensuite, cela a bien fonctionné.

entrez la description de l'image ici

Deb
la source
-3

L'ajout d'une dépendance h2 au fichier pom peut résoudre ces problèmes. ...... com.h2database h2 ......

Girma Duresso
la source
Couvert par la réponse existante
Karl Richter
-8

Dans mon cas

spring.profiles = production // remove it to fix

dans application.properties était la raison

basilic
la source
5
sans rapport, trop spécifique. Votre configuration principale était probablement limitée au productionprofil, donc l'activation de ce profil aurait également résolu votre problème. le problème ici est une spring.datasourceconfiguration manquante dans la configuration active
TecHunter