Не вдалося налаштувати DataSource: атрибут 'url' не вказаний, і жоден вбудований джерело даних не може бути налаштований


128

Я працюю над прикладом 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)

введіть тут опис зображення

Відповіді:


85

перевірте свою заявку. властивості

змінюється

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

1
Де application.properties в intelij ide?
GhostDede

5
@GhostDede, будь ласка, зареєструйтесь у src / main / resources / application.properties
kayesh parvez

Дякую! Це допомогло мені зрозуміти, що відбувається в моєму коді.
саксофоніст

64

Просто додайте: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) працює для мене.

Я отримував ту саму помилку, з якою намагався @EnableAutoConfiguration(exclude=...), не працював.


Відмінно працює, коли я знаю, що мені потрібно використовувати DataSource в якийсь момент, але мені це потрібно не відразу.
alex

працював і на мене.
сак

працює і для мене, ти дивовижний :-)
Сохам

39

Ваша проблема полягає в залежності весняної партії, 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включити h2 dirver, як це:

<?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. Тоді mongo можна використовувати, але для ділової частини партії через програму зчитування / запису.

Я сподіваюся, що це може допомогти вам прояснити свої сумніви.


Це моє запитання - все-таки нам потрібно використовувати H2, якщо використовуємо MongoDB? Я використовував H2, але проблема все така ж !!
Джефф Кук,

Я оновлюю відповідь. Я спробував простий старт, і з цією конфігурацією це працює. Я зміг запустити свою заявку
Валеріо Вауді

10
ви можете виключити spring-jdbc із вашої залежності spring-batch або в класі додатків виключити завантаження компонента джерела даних@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
TecHunter,

марно витрачати час та нелогічно встановлювати h2 у проекті mongo. це рішення спрацювало для мене .. @ValerioVaudi дякую за ясність
Arun3x3

26

Недоречно питання (може бути пов'язані , хоча), але, якщо ви самонастройка нового проекту і цікаво , чому ви отримаєте ту ж помилку, вона може виходити з artifactIdз spring-boot-starter-data-jpaв розділі залежностей. Я навів залежність нижче. Вам потрібно буде визначити базу даних, щоб позбутися цього.

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

5
У моєму випадку це була залежність spring-boot-starter-data-jdbc, яку я прокоментував у pom.xml, і проблема зникла! Думаю, було б непогано включити ці залежності лише за наявності готового драйвера та інших облікових даних, які потім можна оновити в application.properties для успішного створення проекту.
raikumardipak

Я зіткнувся з подібною проблемою, описаною тут. Я бавився з JPA на відміну від безпосереднього використання Mongo, тому додав залежність вище (через Intellij). Я вирішив, що мені не подобається спосіб JPA, тому прокоментував це з pom.xml . Саме тоді я, мабуть, почав отримувати помилку, зазначену у запитанні вгорі. Мені потрібно було запустити, mvn clean installа потім перезавантажити всі проекти Maven від Intellij, щоб позбутися помилки.
Майк,

14

За винятком DataSourceAutoConfiguration.classвідпрацьованого для мене:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

найкраще рішення для додатків, що не базуються на базі даних.
Doogle

10

Це посилання допомогло.

Автоконфігурація Spring Boot намагається автоматично налаштувати компоненти на основі залежностей, доданих до шляху до класу. І оскільки ми маємо залежність JPA (spring-data-starter-jpa) від нашого шляху до класу, він намагається її налаштувати.

Проблема: Spring завантаження не має всієї інформації, необхідної для налаштування джерела даних JPA, тобто властивостей з'єднання JDBC. Рішення:

  1. забезпечити властивості з'єднання JDBC (найкраще)
  2. відкласти надання властивостей підключення, виключивши деякі класи AutoConfig (тимчасові - з часом слід видалити)

Наведене посилання виключає DataSourceAutoConfiguration.classс

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

Але це не спрацювало для мене. Натомість мені довелося виключити 2 класи AutoConfig:

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

Працював у мене, але я все ще не зрозумів, чому мені потрібно це явно виключити
Saurabh Verma

привіт @SaurabhVerma, я відредагував відповідь, щоб пояснити обґрунтування виключення AutoConfigкласів.
bibangamba

Виключення DataSourceAutoConfigurationпрацювало лише у мене на 2.2.1.RELEASEз spring-boot-starter-parent.
user2918640

7

Помилка "Не вдалося налаштувати джерело даних". Спочатку ми вирішили проблему, визначивши джерело даних. Далі ми обговорили, як вирішити проблему, не налаштовуючи джерело даних взагалі.

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


Чи можете ви розширити цю відповідь, будь ласка?
Стерлінг Арчер,

1
Я б скоріше пояснив відповідь тут.
Дедпул

Якщо ви використовуєте будь-який інший метод для налаштування підключення даних, використовуйте таке виключення в application.properties: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Anurag

4

Можливо, ваш каталог ресурсів не додається до шляху до класу під час створення проекту через Spring Initializr. Отже, ваша програма ніколи не завантажує файл application.properties, який ви налаштували.

Щоб зробити швидкий тест, якщо це так, додайте у файл application.properties наступне:

server.port=8081

Тепер під час запуску вашої програми ви повинні побачити у весняному завантажувальному консолі виведення приблизно такого:

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

Якщо для вашого порту все ще встановлено значення 8080 і не змінено на 8081, файли application.properties очевидно не завантажуються.

Ви також можете перевірити, чи працює ваша програма з gradle bootRunкомандного рядка. Що, швидше за все, буде роботою.

Рішення:

  1. Закрийте IntelliJ, а потім у папці проекту видаліть папку ".idea"
  2. Повторно імпортуйте свій проект до IntelliJ, наприклад: "Імпортувати проект" -> "виберіть ТІЛЬКИ файл build.gradle для імпорту". (IntelliJ автоматично захопить решту)
  3. побудуйте та запустіть додаток ще раз

Див. Офіційну відповідь служби підтримки IntelliJ: IDEA-221673


Для мене було достатньо клацнути правою кнопкою миші на папці «Ресурси» та вибрати «Позначити каталог як» -> «Корінь ресурсів».
Балаз Ф.

3

Для весняної завантажувальної версії 2.X.Xнижче конфігурація працювала для мене.

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 застарілий. Новий згаданий у вищевказаній конфігурації. Будь ласка, використовуйте те саме і перезапустіть проект.


2

У мене була та ж проблема вирішена за допомогою add <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


2

Я додав цю анотацію до основного класу мого весняного завантажувального додатка, і все працює ідеально

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

ви вказали на те, куди ви помістили фрагмент, тому +1
Setmax

2

Це може бути тому, що у вас є залежності та плагіни jpa ...

просто прокоментуйте його, якщо не використовуєте (файл build.gradle або pom)

напр

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

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

2

Якщо ви використовуєте Gradle, відновіть Gradle може вирішити цю проблему.


Ого, це вирішило це для мене. І я постійно забуваю про рішення.
GGrec

1

Це просто означає, що ви завантажили весняний початковий код із залежністю бази даних без налаштування бази даних. Тож воно не знає, як підключитися. Для завантажувальної версії Spring 2.18виконайте наведені нижче дії, щоб виправити це.

  1. Створіть базу даних для драйвера, який ви завантажили, тобто mysql/mongoтощо.
  2. У своєму applications.propertiesфайлі додайте інформацію про підключення db. Наведено зразок для, mysqlякщо ваш db 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

  3. Перезавантажте сервер, на якому він працюватиме.

1

Якщо джерело даних визначено в application.resources, переконайтеся, що воно знайдено прямо під ним, src/mainі додайте його до шляху збірки.



1

Додайте цю анотацію до основного файлу Java

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)

0

Це відбувається тому, що сказав @ valerio-vaudi.

Ваша проблема полягає в залежності spring batch spring-boot-starter-batch, яка має транзитивну залежність spring-boot-starter-jdbc maven.

Але ви можете вирішити це, встановивши первинний джерело даних у вашій конфігурації

 @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

У мене була та сама проблема, і я спробував усі наведені вище пропозиції, але не вийшов. Я публікую свою відповідь для майбутніх читачів. Раніше це працювало нормально, але якось воно знову з’явилося. Я вирішив цю проблему, видаливши деякі непотрібні плагіни та залежності з pom.xml

  1. Перш за все, я змінив тип упаковки за замовчуванням на jar (Spring Boot Initializer надає пом в упаковці)

    <packaging>jar</packaging>

  2. Я додав ненавмисно кілька плагінів:

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

Сподіваюсь, моя відповідь комусь допоможе.


0

Цей працював для мене, для MySQL: (Властивості програми)

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

Я видалив застарілу залежність від mybatis у pom.xml, щоб запустити шахту.


0

Якщо ви додали залежність "spring-boot-starter-data-jpa" у pom.xml, будь ласка, додайте відповідну базу даних у залежність, як h2 та ін.


0

Я зустрічаю таку ж помилку під час запуску нового проекту. Використовуйте командний рядок, який працює для мене.

./gradlew bootRun

-1

Думаю, під час імпорту модулів ви імпортували інший пакет, перейдіть до модулів і видаліть усі з них. Після цього імпортуйте модулі з пакету проекту


-1

Для мене папка ресурсів виключалася під час оновлення / збірки maven. Я перейшов до Build Path> Source і виявив, що src / main / resources має "Виключено **". Я видалив цей запис (Клацнув Виключено **> Видалити> Застосувати та закрити).

Тоді це спрацювало нормально.

введіть тут опис зображення



-8

У моєму випадку

spring.profiles = production // remove it to fix

в application.properties була причина


5
не пов’язані між собою, занадто конкретні. Ваша основна конфігурація, швидше за все, була обмежена productionпрофілем, тому активація цього профілю також вирішила б вашу проблему. проблема тут у відсутній spring.datasourceконфігурації в активній конфігурації
TecHunter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.