336 votes

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

Je travaille sur un Spring Boot Batch avec MongoDB et j'ai déjà commencé l'installation de l'application mongod serveur.

Lorsque je lance mon application, j'obtiens l'erreur suivante.

Des conseils pour résoudre 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é mongod avec le résultat suivant :

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)

enter image description here

312voto

Kumar Anand Points 91

Il suffit d'ajouter : @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) fonctionne pour moi.

J'ai eu la même erreur, j'ai essayé avec @EnableAutoConfiguration(exclude=...) n'a pas fonctionné.

5 votes

Cela fonctionne parfaitement lorsque je sais que je dois utiliser la source de données à un moment donné, mais que je n'en ai pas besoin immédiatement.

15 votes

Cela fonctionne vraiment mais la raison de cette erreur est l'ajout de la dépendance de la base de données à pom.xml et l'absence de variable pour la connexion à la base de données. // Si vous voulez vous connecter à la base de données, vous devez ajouter l'attribut dans application.properties au bon endroit.

0 votes

Oui, c'est la solution que je cherchais, car mon application n'a pas de crochets de données (pour l'instant).

187voto

jarosik Points 677

Vérifiez votre application.properties

en changeant

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

à

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

a fonctionné 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

6 votes

Où se trouve le fichier application.properties dans l'interface intelij ?

16 votes

@GhostDede veuillez vérifier dans src/main/resources/application.properties

0 votes

Merci. Cela m'a aidé à comprendre ce qui se passe dans mon code.

75voto

Valerio Vaudi Points 796

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

Spring Batch est un cadre permettant de créer des tâches batch d'entreprise fiables et tolérantes aux pannes. Il prend en charge de nombreuses fonctionnalités comme le redémarrage d'un lot qui a échoué, l'enregistrement de l'état d'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. L'auto-configuration 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 tel que mysql , h2 etc. pour configurer le url .

Mise à jour : 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.xml inclure 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, parce que vous ne pouvez pas utiliser mongo à cette fin, est que l'utilisation de mongo est prévue uniquement pour les lecteurs et les écrivains d'éléments et non pour gérer la base de données interne de Spring Batch qui est un schéma interne, pas un schéma d'entreprise. 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 une capacité ACID parce que chaque lot lit et écrit un morceau de travail et sauvegarde cette information afin de redémarrer le travail. Une solution NoSql n'est pas adaptée à cette situation.

A la fin, vous avez configuré une base de données relationnelle afin de préparer Spring Batch pour une capacité interne, l'abstraction interne ne repose pas sur mongo mais seulement sur jdbc. Ensuite, mongo peut être utilisé mais pour l'aspect commercial du lot via le lecteur/écrivain d'éléments.

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

0 votes

Voici ma question : devons-nous toujours utiliser H2 si nous utilisons MongoDB ? J'ai utilisé H2 mais le problème est toujours le même !

0 votes

Je mets à jour la réponse. J'ai essayé un démarrage simple et avec cette configuration cela fonctionne. Je suis capable de démarrer mon application

12 votes

Vous pouvez exclure spring-jdbc de votre dépendance spring-batch ou dans la classe d'application exclure le chargement du bean datasource @EnableAutoConfiguration(exclude={DataSourceAutoConfiguratio‌​n.class})

34voto

Yoda Points 1044

Ce n'est pas le sujet de la question (mais cela peut être lié), mais, si vous démarrez un nouveau projet et que vous vous demandez pourquoi vous obtenez la même erreur, cela peut provenir de l'élément suivant artifactId de spring-boot-starter-data-jpa dans la section sur les dépendances. J'ai donné la dépendance ci-dessous. Vous devrez définir la base de données pour vous débarrasser de cela.

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

8 votes

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 pense qu'il serait bien d'inclure ces dépendances seulement si vous avez le pilote et d'autres informations d'identification prêtes qui peuvent ensuite être mises à jour dans application.properties pour que le projet se construise avec succès.

0 votes

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 dans le fichier pom.xml . C'est à ce moment-là que j'ai dû commencer à obtenir l'erreur mentionnée dans la question du haut. Je devais exécuter un mvn clean install et ensuite Rechargez tous les projets Maven d'Intellij pour se débarrasser de l'erreur.

7voto

Roger Pc Points 71

Erreur "Failed to configure a DataSource". 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 la source de données.

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

0 votes

Pouvez-vous développer cette réponse ?

2 votes

Je préfère expliquer la réponse ici.

0 votes

Si vous utilisez une autre méthode pour configurer la connexion des données, utilisez l'exclusion suivante dans application.properties : spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X