Oplossen van de fout "Configureren van een gegevensbron is mislukt"

1. Overzicht

In deze korte tutorial bespreken we welke oorzaken en wat lost het Fout bij het configureren van een DataSource op een Spring Boot-project.

We lossen het probleem op met twee verschillende benaderingen:

  1. De gegevensbron definiëren
  2. De automatische configuratie van de gegevensbron uitschakelen

2. Het probleem

Stel nu dat we een Spring Boot-project hebben en we hebben het spring-data-starter-jpa afhankelijkheid en een MySQL JDBC-stuurprogramma voor onze pom.xml:

 org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java runtime 

Maar wanneer we de applicatie uitvoeren, mislukt deze met de fout:

Beschrijving: kan een DataSource niet configureren: het kenmerk 'url' is niet opgegeven en er kan geen ingesloten gegevensbron worden geconfigureerd. Reden: kan geen geschikte stuurprogrammaklasse bepalen

Laten we eens kijken waarom dit gebeurt.

3. De oorzaak

Door het ontwerp probeert de automatische configuratie van Spring Boot de bonen automatisch te configureren op basis van de afhankelijkheden die aan het klassenpad zijn toegevoegd.

En aangezien we de JPA-afhankelijkheid van ons klassenpad hebben, probeert Spring Boot automatisch een JPA te configureren Databron. Het probleem is, we hebben Spring niet de informatie gegeven die het nodig heeft om de automatische configuratie uit te voeren.

We hebben bijvoorbeeld geen JDBC-verbindingseigenschappen gedefinieerd, en dat moeten we doen als we met externe databases zoals MySQL en MSSQL werken. Aan de andere kant zullen we dit probleem niet onder ogen zien met in-memory databases zoals H2, omdat ze een gegevensbron kunnen maken zonder al deze informatie.

4. Oplossingen

4.1. Definieer het Databron Eigenschappen gebruiken

Aangezien het probleem zich voordoet vanwege de ontbrekende databaseverbinding, kunnen we het probleem eenvoudig oplossen door de eigenschappen van de gegevensbron op te geven.

Laten we eerst definieer de eigenschappen van de gegevensbron in het application.properties het dossier van ons project:

spring.datasource.url = jdbc: mysql: // localhost: 3306 / myDb spring.datasource.username = gebruiker1 spring.datasource.password = geef spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver door

Of we kunnen geef de eigenschappen van de gegevensbron op in application.yml:

spring: datasource: driverClassName: com.mysql.cj.jdbc. Driver url: jdbc: mysql: // localhost: 3306 / myDb gebruikersnaam: user1 wachtwoord: pass

4.2. Definieer het Databron Programmatisch

Als alternatief kunnen we onze gegevensbron programmatisch definiëren door met behulp van de utility builder-klasse DataSourceBuilder. We hebben de database-URL, gebruikersnaam, wachtwoord en de SQL-stuurprogramma-informatie nodig om onze gegevensbron te maken:

@Configuration public class DatasourceConfig {@Bean public DataSource datasource () {return DataSourceBuilder.create () .driverClassName ("com.mysql.cj.jdbc.Driver") .url ("jdbc: mysql: // localhost: 3306 / myDb ") .username (" user1 ") .password (" pass ") .build (); }}

Kortom, we kunnen ervoor kiezen om een ​​van de bovenstaande opties te gebruiken om een ​​gegevensbron te configureren volgens onze vereisten.

4.3. Uitsluiten DataSourceAutoConfiguration

In het vorige gedeelte hebben we het probleem opgelost door de eigenschappen van de gegevensbron aan ons project toe te voegen. Maar hoe lossen we dit op als we nog niet klaar zijn om onze gegevensbron te definiëren?

Laten we eens kijken hoe voorkomen dat Spring Boot de gegevensbron automatisch configureert.

De klas DataSourceAutoConfiguration is de basisklasse voor het configureren van een gegevensbron met behulp van de spring.datasource. * eigendommen.

Nu zijn er een paar manieren waarop we dit kunnen uitsluiten van de automatische configuratie.

Ten eerste kunnen we schakel de autoconfiguratie uit met de spring.autoconfigure.excludeeigendom in onze application.properties het dossier:

spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Evenzo kunnen we hetzelfde doen met onze application.yml het dossier:

spring: autoconfigure: exclude: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Of we kunnen gebruik de uitsluiten attribuut op onze @SpringBootApplication of @EnableAutoConfiguration annotatie:

@SpringBootApplication (exclude = {DataSourceAutoConfiguration.class})

In alle bovenstaande voorbeelden zijn we heeft de automatische configuratie van het Databron. En dit heeft geen invloed op het automatisch configureren van andere bonen.

Kortom, we kunnen een van de bovenstaande methoden gebruiken om de automatische configuratie van de gegevensbron door Spring Boot uit te schakelen.

Idealiter zouden we de gegevensbroninformatie moeten verstrekken en de uitsluitingsoptie alleen voor testen moeten gebruiken.

5. Conclusie

In dit artikel hebben we gezien waardoor de 'Configureren van een gegevensbron is mislukt' fout. Eerst hebben we het probleem opgelost door de gegevensbron te definiëren. Vervolgens hebben we besproken hoe u het probleem kunt omzeilen zonder de gegevensbron te configureren.

Zoals altijd is de volledige code die in dit artikel wordt gebruikt, beschikbaar op GitHub.