Løsning af fejlen "Kunne ikke konfigurere en datakilde"

1. Oversigt

I denne korte vejledning diskuterer vi hvad der forårsager og hvad der løser problemet "Kunne ikke konfigurere en DataSource" -fejl på et Spring Boot-projekt.

Vi løser problemet ved hjælp af to forskellige tilgange:

  1. Definition af datakilden
  2. Deaktivering af den automatiske konfiguration af datakilden

2. Problemet

Antag nu, at vi har et Spring Boot-projekt, og vi har tilføjet spring-data-starter-jpa afhængighed og en MySQL JDBC driver til vores pom.xml:

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

Men når vi kører applikationen, mislykkes den med fejlen:

Beskrivelse: Kunne ikke konfigurere en datakilde: attributten 'url' er ikke angivet, og ingen integreret datakilde kunne konfigureres. Årsag: Kunne ikke bestemme en passende førerklasse

Lad os se, hvorfor dette sker.

3. Årsagen

Efter design forsøger den automatiske konfiguration af Spring Boot at konfigurere bønnerne automatisk baseret på de afhængigheder, der er føjet til klassestien.

Og da vi har JPA-afhængighed af vores klassesti, forsøger Spring Boot automatisk at konfigurere en JPA Datakilde. Problemet er, vi har ikke givet Spring de oplysninger, den har brug for til at udføre den automatiske konfiguration.

For eksempel har vi ikke defineret nogen JDBC-forbindelsesegenskaber, og vi bliver nødt til at gøre det, når vi arbejder med eksterne databaser som MySQL og MSSQL. På den anden side står vi ikke over for dette problem med in-memory databaser som H2, da de kan oprette en datakilde uden al denne information.

4. Løsninger

4.1. Definer Datakilde Brug af egenskaber

Da problemet opstår på grund af den manglende databaseforbindelse, kan vi løse problemet ved blot at levere datakildeegenskaberne.

Lad os først definer datakildeegenskaberne i application.properties fil af vores projekt:

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 det kan vi give datakildeegenskaberne i ansøgning.yml:

forår: datakilde: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc: mysql: // localhost: 3306 / myDb brugernavn: bruger1 adgangskode: pass

4.2. Definer Datakilde Programmatisk

Alternativt kan vi definere vores datakilde programmatisk ved ved hjælp af utility builder-klassen DataSourceBuilder. Vi er nødt til at angive database-URL, brugernavn, adgangskode og SQL-driveroplysninger for at oprette vores datakilde:

@Configuration public class DatasourceConfig {@Bean public DataSource datasource () {return DataSourceBuilder.create () .driverClassName ("com.mysql.cj.jdbc.Driver") .url ("jdbc: mysql: // localhost: 3306 / myDb "). brugernavn (" bruger1 "). adgangskode (" adgang ") .build (); }}

Kort sagt kan vi vælge at bruge en af ​​ovenstående muligheder til at konfigurere en datakilde i henhold til vores krav.

4.3. Udelukke DataSourceAutoConfiguration

I det forrige afsnit løste vi problemet ved at tilføje datakildeegenskaberne til vores projekt. Men hvordan løser vi dette, hvis vi endnu ikke er klar til at definere vores datakilde?

Lad os se, hvordan man gør det forhindre Spring Boot i at automatisk konfigurere datakilden.

Klassen DataSourceAutoConfiguration er basisklassen til konfiguration af en datakilde ved hjælp af spring.datasource. * ejendomme.

Nu er der et par måder, hvorpå vi kan udelukke dette fra den automatiske konfiguration.

Først kan vi deaktiver automatisk konfiguration ved hjælp af spring.autoconfigure.excludeejendom i vores application.properties fil:

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

Ligeledes kan vi gøre det samme ved hjælp af vores ansøgning.yml fil:

forår: autokonfiguration: ekskluder: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Eller det kan vi brug udelukke attribut på vores @SpringBootApplication eller @EnableAutoConfiguration kommentar:

@SpringBootApplication (ekskluder = {DataSourceAutoConfiguration.class})

I alle ovenstående eksempler, vi deaktiveret automatisk konfiguration af Datakilde. Og dette påvirker ikke automatisk konfiguration af andre bønner.

Så for at opsummere kan vi bruge en af ​​ovenstående metoder til at deaktivere Spring Boot's automatiske konfiguration af datakilden.

Ideelt set skal vi give datakildeoplysningerne og kun bruge ekskluderingsmuligheden til testning.

5. Konklusion

I denne artikel har vi set, hvad der forårsager "Kunne ikke konfigurere en datakilde" fejl. For det første løste vi problemet ved at definere datakilden. Dernæst diskuterede vi, hvordan vi kan løse problemet uden at konfigurere datakilden overhovedet.

Som altid er den fulde kode, der bruges i denne artikel, tilgængelig på GitHub.