Nie udało się skonfigurować źródła danych: nie określono atrybutu „url” i nie można skonfigurować wbudowanego źródła danych


131

Pracuję nad przykładem Spring Boot Batch z MongoDB i już uruchomiłem mongodserwer.

Po uruchomieniu aplikacji pojawia się poniższy błąd.

Jakieś wskazówki dotyczące tego problemu?

***************************
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>

Zacząłem mongodod następującego wyjścia:

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)

wprowadź opis obrazu tutaj

Odpowiedzi:


90

sprawdź plik application.properties

wymiana pieniędzy

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

do

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

pracował dla mnie. Pełna konfiguracja:

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

1
Gdzie jest plik application.properties w intelij ide?
GhostDede

5
@GhostDede proszę sprawdzić w src / main / resources / application.properties
Kayesh parvez

Dzięki! Pomogło mi to zrozumieć, co dzieje się w moim kodzie.
Saksofonista

70

Po prostu dodaj: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) działa dla mnie.

Pojawiał się ten sam błąd, który próbowałem, @EnableAutoConfiguration(exclude=...)nie działał.


Działa idealnie, gdy wiem, że w pewnym momencie muszę użyć źródła danych, ale nie potrzebuję go od razu.
alex

To naprawdę działa, ale przyczyną tego błędu jest dodanie zależności bazy danych do pom.xml i nie dodano zmiennej do połączenia z DB. // Jeśli chcesz połączyć się z DB, musisz dodać atrybut w application.properties w odpowiednim miejscu
Tanakorn Lueangkajonvit,

39

Twoim problemem jest zależność wsadu wiosennego, spring-boot-starter-batchktóra ma spring-boot-starter-jdbcprzechodnią zależność maven.

Spring Batch to platforma do tworzenia niezawodnych i odpornych na błędy zadań wsadowych w przedsiębiorstwie. Obsługuje wiele funkcji, takich jak ponowne uruchamianie nieudanej partii, rejestrowanie statusu wykonania partii i tak dalej. Aby to osiągnąć, Spring Batch używa schematu bazy danych do przechowywania statusu zarejestrowanych zadań, autokonfiguracja już zapewnia podstawową konfigurację wymaganego źródła danych i to właśnie ta konfiguracja wymaga konfiguracji relacyjnej bazy danych.

Aby rozwiązać ten problem należy dołączyć jakiś sterownik bazy danych takie jak mysql, h2itd, aby skonfigurować url.

Aktualizacja : na początek możesz skonfigurować plik application.yml jak poniżej:

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:localhost;DB_CLOSE_ON_EXIT=FALSE
    username: admin
    password:

i oczywiście w swoim pom.xmldirver h2 w następujący sposób:

<?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>

Motywacją, ponieważ nie można używać mongo do tego celu, jest to, że korzystanie z mongo jest przeznaczone tylko dla czytających i piszących elementów, a nie do zarządzania wewnętrzną bazą danych Spring Batch, która jest schematem wewnętrznym, a nie schematem biznesowym. Zapytanie jest zwykłym zapytaniem SQL, a wewnętrzna abstrakcja opiera się na relacyjnej bazie danych. Konieczne jest posiadanie bazy danych z funkcją ACID, ponieważ każda partia odczytuje i zapisuje fragment pracy oraz zapisuje te informacje w celu ponownego uruchomienia zadania. Rozwiązanie NoSql nie jest do tego odpowiednie.

Na koniec skonfigurowałeś relacyjną bazę danych, aby przygotować Spring Batch na wewnętrzne możliwości, wewnętrzna abstrakcja nie polega na mongo tylko na jdbc. Następnie można użyć mongo, ale po stronie biznesowej partii za pośrednictwem czytnika / pisarza elementów.

Mam nadzieję, że pomoże ci to rozwiać wątpliwości.


To jest moje pytanie - nadal musimy używać H2, jeśli używamy MongoDB? Użyłem H2, ale nadal problem jest taki sam!
Jeff Cook,

Aktualizuję odpowiedź. Wypróbowałem prosty początek i przy tej konfiguracji działa. Mogę rozpocząć aplikację
Valerio Vaudi 07.07.18

10
możesz wykluczyć spring-jdbc z zależności wiosennej partii lub w klasie aplikacji wykluczyć ładowanie fasoli źródła danych@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
TecHunter

strata czasu i nielogiczne instalowanie h2 w projekcie mongo. to rozwiązanie zadziałało dla mnie .. @ValerioVaudi dzięki za przejrzystość
Arun3x3

26

Nie do sedna pytania (chociaż może być powiązane), ale jeśli załadujesz nowy projekt i zastanawiasz się, dlaczego pojawia się ten sam błąd, może on pochodzić z artifactIdof spring-boot-starter-data-jpaw sekcji zależności. Poniżej podałem zależność. Będziesz musiał zdefiniować bazę danych, aby się tego pozbyć.

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

5
W moim przypadku była to zależność spring-boot-starter-data-jdbc, którą skomentowałem w pom.xml i problem zniknął! Myślę, że byłoby miło uwzględnić te zależności tylko wtedy, gdy masz gotowy sterownik i inne poświadczenia, które można następnie zaktualizować w application.properties, aby projekt został pomyślnie zbudowany.
raikumardipak

Napotkałem podobny problem opisany tutaj. Bawiłem się JPA w przeciwieństwie do bezpośredniego używania Mongo, więc dodałem powyższą zależność (przez Intellij). Zdecydowałem, że nie podoba mi się sposób JPA, więc skomentowałem go z pom.xml . Wtedy musiałem zacząć otrzymywać błąd zanotowany w pytaniu na górze. Musiałem uruchomić, mvn clean installa następnie ponownie załadować wszystkie projekty Maven z Intellij, aby pozbyć się błędu.
Mike

14

Z wyłączeniem DataSourceAutoConfiguration.classpracowitych dla mnie:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

najlepsze rozwiązanie dla aplikacji nie opartych na bazie danych.
Doogle

10

Ten link pomógł.

Automatyczna konfiguracja Spring Boot próbuje automatycznie skonfigurować komponenty bean na podstawie zależności dodanych do ścieżki klas. A ponieważ mamy zależność JPA (spring-data-starter-jpa) od naszej ścieżki klas, program próbuje ją skonfigurować.

Problem: Spring boot nie ma wszystkich informacji potrzebnych do skonfigurowania źródła danych JPA, czyli właściwości połączenia JDBC. Rozwiązania:

  1. podać właściwości połączenia JDBC (najlepiej)
  2. odłożyć dostarczanie właściwości połączenia poprzez wykluczenie niektórych klas AutoConfig (tymczasowe - powinno zostać ostatecznie usunięte)

Powyższy link wyklucza rozszerzenie DataSourceAutoConfiguration.classwith

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

Ale to nie zadziałało dla mnie. Zamiast tego musiałem wykluczyć 2 klasy AutoConfig:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, XADataSourceAutoConfiguration.class})

Pracowało dla mnie, ale nadal nie rozumiem, dlaczego muszę to wyraźnie wykluczyć
Saurabh Verma

hej @SaurabhVerma, zredagowałem odpowiedź, aby wyjaśnić uzasadnienie wykluczenia AutoConfigzajęć.
bibangamba

Wyłączenie DataSourceAutoConfigurationdziałało tylko dla mnie 2.2.1.RELEASEz spring-boot-starter-parent.
user2918640

7

Błąd „Nie udało się skonfigurować źródła danych”. Najpierw rozwiązaliśmy problem, definiując źródło danych. Następnie omówiliśmy, jak obejść ten problem bez konieczności konfigurowania źródła danych.

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


Czy możesz rozwinąć tę odpowiedź?
Sterling Archer

1
Wolałbym raczej wyjaśnić odpowiedź tutaj.
CA Arefe

Jeśli używasz jakiejkolwiek innej metody konfigurowania połączenia danych, użyj następującego wykluczenia w application.properties: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Anurag

4

Może się zdarzyć, że katalog zasobów nie zostanie dodany do ścieżki klas podczas tworzenia projektu za pomocą Spring Initializr. Dlatego aplikacja nigdy nie ładuje skonfigurowanego pliku application.properties.

Aby przeprowadzić szybki test, jeśli tak jest, dodaj następujące dane do pliku application.properties:

server.port=8081

Teraz podczas uruchamiania aplikacji powinieneś zobaczyć w konsoli rozruchowej wiosny coś takiego:

INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): **8081** (http) with context path ''

Jeśli domyślny port nadal ma wartość 8080 i nie został zmieniony na 8081, oznacza to, że pliki application.properties oczywiście nie są ładowane.

Możesz również sprawdzić, czy Twoja aplikacja działa z gradle bootRun wiersza poleceń. Który najprawdopodobniej zadziała.

Rozwiązanie:

  1. Zamknij IntelliJ, a następnie w folderze projektu usuń folder „.idea”
  2. Ponownie zaimportuj swój projekt do IntelliJ w następujący sposób: "Importuj projekt" -> "wybierz TYLKO plik build.gradle do zaimportowania". (IntelliJ automatycznie pobierze resztę)
  3. skompiluj i ponownie uruchom aplikację

Zobacz oficjalną odpowiedź udzieloną przez IntelliJ Support: IDEA-221673


U mnie wystarczyło kliknąć prawym przyciskiem myszy folder Resources i wybrać „Mark directory as” -> „Resources Root”.
Balazs F.

4

Przyczyna

JPA (Java Persistence API) to specyfikacja Java dla narzędzi ORM (Object-Relational Mapping). Zależność spring-boot-starter-data-jpa umożliwia ORM w kontekście struktury spring boot.

Funkcja automatycznej konfiguracji JPA aplikacji Spring Boot próbuje nawiązać połączenie z bazą danych przy użyciu JPA Datasource. Komponent bean JPA DataSource wymaga sterownika bazy danych, aby połączyć się z bazą danych.

Sterownik bazy danych powinien być dostępny jako zależność w pliku pom.xml. W przypadku zewnętrznych baz danych, takich jak Oracle, SQL Server, MySql, DB2, Postgres, MongoDB itp. Do nawiązania połączenia wymagane są właściwości połączenia JDBC bazy danych.

Aby naprawić ten wyjątek, należy skonfigurować sterownik bazy danych i właściwości połączenia JDBC. Nie udało się skonfigurować elementu DataSource: nie określono atrybutu „url” i nie można skonfigurować wbudowanego źródła danych. Przyczyna: nie udało się określić odpowiedniej klasy kierowcy.

application.properties

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

application.yaml

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

Programując

@SpringBootApplication(exclude =  {DataSourceAutoConfiguration.class })

3

Dla wersji wiosennej 2.X.Xponiżej konfiguracja zadziałała.

spring.datasource.url=jdbc:mysql://localhost:3306/rest
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update 

Stary sterownik jdbc jest przestarzały. Nowa jest wspomniana na powyższej konfiguracji. Użyj tego samego i zrestartuj projekt.



2

Dodałem tę adnotację do głównej klasy mojej aplikacji do rozruchu wiosennego i wszystko działa idealnie

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

2

Może tak być, ponieważ masz zależności i wtyczki jpa ...

po prostu skomentuj, jeśli nie używasz (plik build.gradle lub pom)

na przykład

// kotlin("plugin.jpa") version "1.3.61"

// implementation("org.springframework.boot:spring-boot-starter-data-jpa")

2

Jeśli używasz Gradle, przebudowanie Gradle może rozwiązać ten problem.


Wow, to rozwiązało to dla mnie. I ciągle zapominam o rozwiązaniu.
GGrec

1

Oznacza to po prostu, że pobrałeś kod startowy sprężyny z zależnościami od bazy danych bez konfigurowania bazy danych. Więc nie wie, jak się połączyć. W przypadku wersji rozruchowej Spring 2.18wykonaj poniższe czynności, aby to naprawić.

  1. Utwórz bazę danych dla pobranego sterownika, np. mysql/mongoItp.
  2. W applications.propertiespliku dodaj informacje o połączeniu bazy danych. Próbka jest podana, mysqljeśli twoja baza danych ma mongoją zmienić mongo.

    spring.datasource.url=jdbc:mysql://localhost:3306/db_name_that_you_created spring.datasource.username=your_db_username_here spring.datasource.password=your_db_pass_here 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

  3. Uruchom ponownie serwer, na którym będzie działać.

1

Jeśli źródło danych jest zdefiniowane w programie application.resources, upewnij się, że znajduje się bezpośrednio pod src/maini dodaj je do ścieżki budowania.


1

Jeśli masz zależność JPA w swoim pom.xml, po prostu ją usuń. To rozwiązanie zadziałało dla mnie.


1

Dodaj tę adnotację w głównym pliku java

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)

0

Dzieje się tak, ponieważ powiedział @ valerio-vaudi.

Twoim problemem jest zależność wsadu sprężyny-rozruchowej-partii-rozruchowej-sprężyny, która ma przechodnią zależność typu Maven typu spring-boot-starter-jdbc.

Ale możesz rozwiązać ten problem, ustawiając podstawowe źródło danych w swojej konfiguracji

 @Primary
 @Bean(name = "dataSource")
 @ConfigurationProperties(prefix = "spring.datasource")
 public DataSource getDataSource() {
      return DataSourceBuilder.create().build();
 }

 @Bean
 public JdbcTemplate jdbcTemplate(DataSource dataSource) {
      return new JdbcTemplate(dataSource);
 }

0

Miałem ten sam problem i wypróbowałem wszystkie powyższe sugestie, ale nie wyszło. Wysyłam swoją odpowiedź dla przyszłych czytelników. Wcześniej działało dobrze, ale jakoś się pojawiło. Rozwiązałem ten problem, usuwając niepotrzebne wtyczki i zależności z pom.xml

  1. Przede wszystkim zmieniłem domyślny typ opakowania na słoik (Spring Boot Initializer podaje pom w opakowaniu)

    <packaging>jar</packaging>

  2. Dodałem przypadkowo kilka wtyczek:

    <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <attachClasses>true</attachClasses> <webXml>target/web.xml</webXml> <webResources> <resource> <directory>src/main/webapp</directory> <filtering>true</filtering> </resource> </webResources> </configuration> </plugin>

Mam nadzieję, że moja odpowiedź komuś pomoże.


0

Ten działał dla mnie, dla MySQL: (Właściwości aplikacji)

spring.datasource.url=jdbc:mysql://localhost:3306/db?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&
useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=admin
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true

0

Usunąłem przestarzałą zależność od mybatis w pom.xml, aby uruchomić mój.


0

Jeśli dodałeś zależność "spring-boot-starter-data-jpa" w pom.xml, dodaj odpowiednią bazę danych w zależności jak h2 itd.


0

Ten sam błąd napotykam przy rozpoczynaniu nowego projektu. U mnie działa linia poleceń.

./gradlew bootRun

0

Jeśli używasz YAML do konfiguracji, może to być problem z wcięciami. Dokładnie sprawdź pliki YAML.


-1

Myślę, że importując moduły zaimportowałeś inny pakiet, przejdź do modułów i usuń je wszystkie. Następnie zaimportuj moduły z pakietu projektu


-1

Dla mnie folder zasobów był wykluczany z aktualizacji / kompilacji mavena. Poszedłem do Build Path> Source i stwierdziłem, że src / main / resources mają „Excluded **”. Usunąłem ten wpis (kliknąłem Wykluczone **> Usuń> Zastosuj i zamknij).

Wtedy zadziałało dobrze.

wprowadź opis obrazu tutaj



-8

W moim przypadku

spring.profiles = production // remove it to fix

w application.properties był tego powodem


5
niepowiązane, zbyt szczegółowe. Twoja główna konfiguracja była najprawdopodobniej ograniczona do productionprofilu, więc aktywacja tego profilu również rozwiązałaby problem. problemem tutaj jest brakująca spring.datasourcekonfiguracja w aktywnej konfiguracji
TecHunter
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.