Løser feilen "Kunne ikke konfigurere en datakilde"

1. Oversikt

I denne korte veiledningen vil vi diskutere hva som forårsaker og hva som løser "Kunne ikke konfigurere en DataSource" -feil på et Spring Boot-prosjekt.

Vi løser problemet ved å bruke to forskjellige tilnærminger:

  1. Definere datakilden
  2. Deaktivering av automatisk konfigurasjon av datakilden

2. Problemet

Anta at vi har et Spring Boot-prosjekt, og vi har lagt til spring-data-starter-jpa avhengighet og en MySQL JDBC-driver til vår pom.xml:

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

Men når vi kjører applikasjonen, mislykkes den med feilen:

Beskrivelse: Kunne ikke konfigurere en DataSource: 'url' attributt er ikke spesifisert, og ingen innebygd datakilde kan konfigureres. Årsak: Kunne ikke bestemme en passende førerklasse

La oss se hvorfor dette skjer.

3. Årsaken

Ved design prøver Spring Boot automatisk konfigurasjon å konfigurere bønnene automatisk basert på avhengighetene som er lagt til klassestien.

Og siden vi har JPA-avhengighet av klassestien vår, prøver Spring Boot å konfigurere en JPA automatisk Datakilde. Problemet er, vi har ikke gitt Spring den informasjonen den trenger for å utføre den automatiske konfigurasjonen.

For eksempel har vi ikke definert noen JDBC-tilkoblingsegenskaper, og vi må gjøre det når vi jobber med eksterne databaser som MySQL og MSSQL. På den annen side vil vi ikke møte dette problemet med minnedatabaser som H2, siden de kan opprette en datakilde uten all denne informasjonen.

4. Løsninger

4.1. Definer Datakilde Bruke egenskaper

Siden problemet oppstår på grunn av manglende databasetilkobling, kan vi løse problemet ganske enkelt ved å oppgi datakildeegenskapene.

Først, la oss definere datakildeegenskapene i application.properties fil av prosjektet vårt:

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

Eller vi kan oppgi datakildeegenskapene i application.yml:

vår: datakilde: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc: mysql: // localhost: 3306 / myDb brukernavn: bruker1 passord: pass

4.2. Definer Datakilde Programmatisk

Alternativt kan vi definere datakilden vår programmatisk, ved ved hjelp av klassen verktøybygger DataSourceBuilder. Vi må oppgi URL-adressen til databasen, brukernavnet, passordet og SQL-driverinformasjonen for å opprette datakilden vår:

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

Kort sagt, vi kan velge å bruke et av alternativene ovenfor for å konfigurere en datakilde i henhold til våre krav.

4.3. Utelukke DataSourceAutoConfiguration

I forrige avsnitt løste vi problemet ved å legge til datakildeegenskapene i prosjektet vårt. Men hvordan løser vi dette hvis vi ennå ikke er klare til å definere datakilden vår?

La oss se hvordan forhindre at Spring Boot konfigurerer datakilden automatisk.

Klassen DataSourceAutoConfiguration er basisklassen for å konfigurere en datakilde ved hjelp av vår.datakilde. * eiendommer.

Nå er det noen måter vi kan ekskludere dette fra autokonfigurasjonen.

Først kan vi deaktivere autokonfigurasjonen ved hjelp av spring.autoconfigure.excludeeiendom i vår application.properties fil:

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

På samme måte kan vi gjøre det samme ved å bruke vår application.yml fil:

vår: autokonfigurering: ekskluder: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Eller vi kan bruke utelukke attributt på vår @SpringBootApplication eller @EnableAutoConfiguration kommentar:

@SpringBootApplication (ekskluder = {DataSourceAutoConfiguration.class})

I alle eksemplene ovenfor har vi deaktivert automatisk konfigurasjon av Datakilde. Og dette påvirker ikke automatisk konfigurering av andre bønner.

Så for å oppsummere kan vi bruke en av metodene ovenfor for å deaktivere Spring Boots automatiske konfigurasjon av datakilden.

Ideelt sett bør vi oppgi datakildeinformasjonen og bruke ekskluderingsalternativet bare for testing.

5. Konklusjon

I denne artikkelen har vi sett hva som forårsaker “Kunne ikke konfigurere en DataSource” feil. Først løste vi problemet ved å definere datakilden. Deretter diskuterte vi hvordan vi kan løse problemet uten å konfigurere datakilden i det hele tatt.

Som alltid er hele koden som brukes i denne artikkelen tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found