A „Nem sikerült konfigurálni az adatforrást” hiba elhárítása

1. Áttekintés

Ebben a rövid bemutatóban megvitatjuk mi okozza és mi oldja meg a “Nem sikerült konfigurálni a DataSource-t” hiba egy tavaszi bakancs projekten.

Két különböző megközelítéssel oldjuk meg a problémát:

  1. Az adatforrás meghatározása
  2. Az adatforrás automatikus konfigurálásának letiltása

2. A probléma

Tegyük fel, hogy van egy Spring Boot projektünk, és hozzáadtuk a spring-data-starter-jpa függőség és egy MySQL JDBC illesztőprogram a mi pom.xml:

 org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java futásidejű 

De amikor az alkalmazást futtatjuk, a hiba nem sikerül:

Leírás: Nem sikerült konfigurálni a DataSource-t: az 'url' attribútum nincs megadva, és nem lehet beágyazott adatforrást konfigurálni. Ok: Nem sikerült meghatározni a megfelelő vezetőosztályt

Lássuk, miért történik ez.

3. Az ok

Tervezés szerint a Spring Boot automatikus konfigurációja megpróbálja a babokat automatikusan konfigurálni az osztályútvonalhoz adott függőségek alapján.

És mivel a JPA függ az osztályúttól, a Spring Boot megpróbálja automatikusan konfigurálni a JPA-t Adatforrás. Az a baj, nem adtuk meg Springnek az automatikus konfiguráláshoz szükséges információkat.

Például nem definiáltunk JDBC kapcsolat tulajdonságokat, és ezt meg kell tennünk, amikor olyan külső adatbázisokkal dolgozunk, mint a MySQL és az MSSQL. Másrészt nem fogunk szembenézni ezzel a problémával a memóriában lévő olyan adatbázisoknál, mint a H2, mivel ezek az adatok nélkül képesek létrehozni egy adatforrást.

4. Megoldások

4.1. Határozza meg a Adatforrás A Tulajdonságok használata

Mivel a probléma a hiányzó adatbázis-kapcsolat miatt jelentkezik, egyszerűen megoldhatjuk a problémát az adatforrás tulajdonságainak megadásával.

Először is meghatározza az adatforrás tulajdonságait a alkalmazás.tulajdonságok fájl projektünk:

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

Vagy, megtehetjük adja meg az adatforrás tulajdonságait alkalmazás.yml:

tavasz: adatforrás: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc: mysql: // localhost: 3306 / myDb felhasználónév: user1 jelszó: pass

4.2. Határozza meg a Adatforrás Programozatosan

Alternatív megoldásként meghatározhatjuk adatforrásunkat programozottan, a a közműépítő osztály használatával DataSourceBuilder. Adatforrásunk létrehozásához meg kell adnunk az adatbázis URL-jét, felhasználónevét, jelszavát és az SQL illesztőprogram adatait:

@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 (); }}

Röviden, választhatjuk, hogy a fenti lehetőségek bármelyikét felhasználjuk az adatforrás konfigurálásához a követelményeinknek megfelelően.

4.3. Kizárás DataSourceAutoConfiguration

Az előző szakaszban úgy javítottuk ki a problémát, hogy hozzáadtuk az adatforrás tulajdonságait a projektünkhöz. De hogyan oldjuk meg ezt, ha még nem vagyunk készek meghatározni az adatforrásunkat?

Lássuk, hogyan kell megakadályozza, hogy a Spring Boot automatikusan konfigurálja az adatforrást.

Osztály DataSourceAutoConfiguration az alaposztály az adatforrás konfigurálásához a tavasz.adatforrás. * tulajdonságait.

Néhány módon kizárhatjuk ezt az automatikus konfigurációból.

Először is tiltsa le az automatikus konfigurációt a tavasz.autokonfigurálás.kizáringatlan miénkben alkalmazás.tulajdonságok fájl:

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

Ugyanígy megtehetjük ugyanezt a sajátunk használatával is alkalmazás.yml fájl:

tavasz: autoconfigure: kizárás: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Vagy, megtehetjük használja a kizárni attribútum a mi @SpringBootApplication vagy @EnableAutoConfiguration annotáció:

@SpringBootApplication (kizárva = {DataSourceAutoConfiguration.class})

Az összes fenti példában mi letiltotta a. automatikus konfigurálását Adatforrás. És ez nem befolyásolja más babok automatikus konfigurálását.

Összefoglalva tehát a fenti módszerek bármelyikével letilthatjuk a Spring Boot automatikus adatkonfigurációját.

Ideális esetben meg kell adnunk az adatforrás adatait, és a kizárás opciót csak tesztelésre kell használnunk.

5. Következtetés

Ebben a cikkben megnéztük, mi okozza a „Nem sikerült konfigurálni egy adatforrást” hiba. Először az adatforrás meghatározásával javítottuk ki a problémát. Ezután megvitattuk, hogyan lehet megoldani a problémát az adatforrás konfigurálása nélkül.

Mint mindig, a cikkben használt teljes kód elérhető a GitHubon.