Не удалось настроить DataSource: атрибут 'url' не указан и встроенный источник данных не может быть настроен
Я работаю над Spring Boot Batch примером с MongoDB и уже запустил сервер mongod
.
Когда я запускаю свое приложение, я получаю сообщение об ошибке ниже.
Есть какие-нибудь указатели на эту проблему?
***************************
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>
Я запустил mongod
со следующим выводом:
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)
![enter image description here]()
Ответы
Ответ 1
Ваша проблема заключается в зависимости пружинной партии spring-boot-starter-batch
, которая имеет spring-boot-starter-jdbc
транзитивную зависимость maven.
Spring Batch - это основа для создания надежных и отказоустойчивых корпоративных пакетных заданий. Он поддерживает множество функций, таких как перезапуск неудачного пакета, запись состояния выполнения пакета и т.д. Чтобы добиться того, что Spring Batch использует схему базы данных для хранения статуса зарегистрированных заданий, автоконфигурация уже предоставляет базовую конфигурацию требуемого источника данных, и именно эта конфигурация требует конфигурации реляционной базы данных.
Для решения этой проблемы вы должны включить драйвер базы данных, например mysql
, h2
и т.д., Чтобы настроить url
.
Обновление:
Для начала вы можете настроить ваш application.yml, как показано ниже:
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:localhost;DB_CLOSE_ON_EXIT=FALSE
username: admin
password:
и, конечно, в ваш pom.xml
включите d2ver h2 следующим образом:
<?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>
Мотивация, поскольку вы не можете использовать mongo для этой цели, заключается в том, что использование mongo предоставляется только для программ чтения и записи элементов, а не для управления внутренней базой данных Spring Batch, которая является внутренней схемой, а не бизнес-схемой., Запрос является простым SQL-запросом, а внутренняя абстракция опирается на реляционную базу данных. Необходимо иметь базу данных с возможностью ACID, потому что каждый пакет читает и записывает кусок работы и сохраняет эту информацию для перезапуска задания. Решение NoSql не подходит для этого.
В конце вы настроили реляционную базу данных, чтобы подготовить Spring Batch для внутренних возможностей, внутренняя абстракция не полагается на mongo только на jdbc. Тогда монго можно использовать, но для бизнес-части пакета через устройство чтения/записи элементов.
Я надеюсь, что это поможет вам очистить ваши сомнения.
Ответ 2
проверьте ваше приложение. свойства
изменения
spring.datasource.driverClassName=com.mysql.jdbc.Driver
в
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
работал на меня. Полная конфигурация:
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
Ответ 3
Не в вопросе вопроса (может быть связано, хотя), но, если вы запускаете новый проект и задаетесь вопросом, почему вы получаете ту же ошибку, это может происходить из artifactId
spring-boot-starter-data-jpa
в раздел зависимости. Я дал зависимость ниже. Вам нужно будет определить базу данных, чтобы избавиться от этого.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Ответ 4
Ошибка "Не удалось настроить источник данных". Сначала мы устранили проблему, определив источник данных. Далее мы обсудили, как обойти эту проблему, не настраивая источник данных вообще.
https://www.baeldung.com/spring-boot-failed-to-configure-data-source
Ответ 5
Для весенней загрузки версии 2.XX
ниже конфигурация работала у меня.
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
Старый драйвер jdbc устарел. Новый упоминается в приведенной выше конфигурации. Пожалуйста, используйте то же самое и перезапустите проект.
Ответ 6
У меня была та же проблема, решенная добавлением <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>
Источник:https://github.com/spring-projects/spring-boot/issues/13796#issuecomment-413313346
Ответ 7
Я только начинал свой первый весенний загрузочный проект, получил эту ошибку. Эта ссылка помогла. Они показали мне, как добавить/настроить источник данных ИЛИ отложить настройку (это то, что мне было нужно).
Их решение состояло в том, чтобы исключить DataSourceAutoConfiguration.class
с помощью
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
Но это не сработало для меня. Вместо этого я просмотрел сообщение об ошибке для класса AutoConfig, который может быть корнем моей проблемы, и в итоге использовал:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, XADataSourceAutoConfiguration.class})
Не знаю, почему это работает только тогда, когда я исключаю оба класса. Исключение одного из них само по себе не сработало.
Ответ 8
Это просто означает, что вы скачали стартовый код Spring с зависимостью от базы данных без настройки базы данных. Поэтому он не знает, как подключиться. Для загрузочной версии Spring 2.18
выполните следующие шаги, чтобы исправить это.
- Создайте базу данных для загруженного вами драйвера, например
mysql/mongo
и т.д.
В вашем файле applications.properties
добавьте информацию о подключении к БД. Образец дается для mysql
, если ваш дБ равен mongo
, измените его на 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
- Перезагрузите сервер, на котором он будет работать.
Ответ 9
Просто добавьте: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
работает для меня.
Я получаю ту же ошибку, которую пытался с @EnableAutoConfiguration (exclude =...) не работает.
Ответ 10
Добавление зависимости h2 к файлу pom может решить такие проблемы....... com.h2database h2......
Ответ 11
В моем случае
spring.profiles = production // remove it to fix
в application.properties была причина