Pracuję nad przykładem Spring Boot Batch z MongoDB i już uruchomiłem mongod
serwer.
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 mongod
od 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)
spring
spring-boot
spring-batch
Jeff Cook
źródło
źródło
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ł.źródło
Twoim problemem jest zależność wsadu wiosennego,
spring-boot-starter-batch
która maspring-boot-starter-jdbc
przechodnią 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
,h2
itd, 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.xml
dirver 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.
źródło
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
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
artifactId
ofspring-boot-starter-data-jpa
w 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>
źródło
mvn clean install
a następnie ponownie załadować wszystkie projekty Maven z Intellij, aby pozbyć się błędu.Z wyłączeniem
DataSourceAutoConfiguration.class
pracowitych dla mnie:@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
źródło
Ten link pomógł.
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:
Powyższy link wyklucza rozszerzenie
DataSourceAutoConfiguration.class
with@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})
źródło
AutoConfig
zajęć.DataSourceAutoConfiguration
działało tylko dla mnie2.2.1.RELEASE
zspring-boot-starter-parent
.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
źródło
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:
Zobacz oficjalną odpowiedź udzieloną przez IntelliJ Support: IDEA-221673
źródło
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 })
źródło
Dla wersji wiosennej
2.X.X
poniż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.
źródło
Miałem ten sam problem rozwiązany przez dodanie
<scope>provided</scope>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <scope>provided</scope> </dependency>
Źródło: https://github.com/spring-projects/spring-boot/issues/13796#issuecomment-413313346
źródło
Dodałem tę adnotację do głównej klasy mojej aplikacji do rozruchu wiosennego i wszystko działa idealnie
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
źródło
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")
źródło
Jeśli używasz Gradle, przebudowanie Gradle może rozwiązać ten problem.
źródło
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.18
wykonaj poniższe czynności, aby to naprawić.mysql/mongo
Itp.W
applications.properties
pliku dodaj informacje o połączeniu bazy danych. Próbka jest podana,mysql
jeśli twoja baza danych mamongo
ją 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
źródło
Jeśli źródło danych jest zdefiniowane w programie
application.resources
, upewnij się, że znajduje się bezpośrednio podsrc/main
i dodaj je do ścieżki budowania.źródło
Jeśli masz zależność JPA w swoim pom.xml, po prostu ją usuń. To rozwiązanie zadziałało dla mnie.
źródło
Dodaj tę adnotację w głównym pliku java
@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
źródło
Dzieje się tak, ponieważ powiedział @ valerio-vaudi.
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); }
źródło
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
Przede wszystkim zmieniłem domyślny typ opakowania na słoik (Spring Boot Initializer podaje pom w opakowaniu)
<packaging>jar</packaging>
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.
źródło
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
źródło
Usunąłem przestarzałą zależność od mybatis w pom.xml, aby uruchomić mój.
źródło
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.
źródło
Ten sam błąd napotykam przy rozpoczynaniu nowego projektu. U mnie działa linia poleceń.
źródło
Jeśli używasz YAML do konfiguracji, może to być problem z wcięciami. Dokładnie sprawdź pliki YAML.
źródło
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
źródło
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.
źródło
Dodanie zależności h2 do pliku pom może rozwiązać takie problemy. ...... com.h2 baza danych h2 ......
źródło
W moim przypadku
spring.profiles = production // remove it to fix
w application.properties był tego powodem
źródło
production
profilu, więc aktywacja tego profilu również rozwiązałaby problem. problemem tutaj jest brakującaspring.datasource
konfiguracja w aktywnej konfiguracji