Bir DataSource yapılandırılamadı: "url" özelliği belirtilmedi ve katıştırılmış veri kaynağı yapılandırılamadı


128

MongoDB ile Spring Boot Batch örneği üzerinde çalışıyorum ve mongodsunucuyu çoktan başlattım .

Uygulamamı başlattığımda aşağıdaki hatayı alıyorum.

Bu sorun için herhangi bir işaret var mı?

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

mongodAşağıdaki çıktıyla başladım :

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)

görüntü açıklamasını buraya girin

Yanıtlar:


85

uygulamanızı kontrol edin. özellikler

değiştirme

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

-e

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

benim için çalıştı. Tam yapılandırma:

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
İntelij ide'de application.properties nerede?
GhostDede

5
@GhostDede lütfen kontrol edin src / main / resources / application.properties
kayesh parvez

Teşekkürler! Kodumda neler olduğunu anlamama yardımcı oldu.
Saxophonist

64

Sadece şunu ekleyin: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) benim için çalışıyor.

Çalıştığım aynı hatayı alıyordum @EnableAutoConfiguration(exclude=...).


DataSource'u bir noktada kullanmam gerektiğini ama hemen ihtiyacım olmadığını bildiğimde mükemmel çalışıyor.
alex

benim için de çalıştı.
sak

benim için de çalışıyor, harikasın :-)
Soham

39

Senin sorunun bahar parti bağımlılık olan spring-boot-starter-batchbir sahiptir spring-boot-starter-jdbcgeçişli maven bağımlılık.

Spring Batch, güvenilir ve hata toleranslı kurumsal toplu işler oluşturmak için bir çerçevedir. Başarısız bir grubun yeniden başlatılması, toplu işlemin yürütülmesinin durumunu kaydetme gibi birçok özelliği destekler. Spring Batch'in kayıtlı işlerin durumunu saklamak üzere bir veritabanı şeması kullanmasını sağlamak için, otomatik konfigürasyon size gerekli veri kaynağının temel konfigürasyonunu zaten sağlar ve ilişkisel veritabanı konfigürasyonunu gerektiren bu konfigürasyondur.

Bunu çözmek için sizin gibi bazı veritabanı sürücüsünü içermelidir mysql, h2yapılandırmak, vb url.

Güncelleme : Sadece başlamak için application.yml dosyanızı aşağıdaki gibi yapılandırabilirsiniz:

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

ve elbette pom.xmlh2 direncini şöyle ekleyin :

<?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'yu bu amaçla kullanamayacağınız için motivasyon, mongo kullanımının sadece madde okuyucuları ve yazarları için sağlanması ve bir iş şeması değil dahili bir şema olan Spring Batch'in dahili veritabanını yönetmek için olmamasıdır. Sorgu düz SQL sorgusudur ve iç soyutlama ilişkisel bir veritabanına dayanır. ACID özelliğine sahip bir veri tabanına sahip olmak gerekir çünkü her parti bir yığın işi okur ve yazar ve işi yeniden başlatmak için bu bilgileri kaydeder. Bunun için bir NoSql çözümü uygun değildir.

Sonunda, Spring Batch'i dahili yeteneklere hazırlamak için ilişkisel bir veritabanı yapılandırdınız, dahili soyutlama mongo'ya sadece jdbc'ye dayanmıyor. Daha sonra mongo kullanılabilir, ancak partinin iş tarafı için madde okuyucu / yazıcı aracılığıyla kullanılabilir.

Umarım bu, şüphelerinizi gidermenize yardımcı olabilir.


Sorum şu - MongoDB kullanılıyorsa yine de H2 kullanmamız gerekiyor mu? H2 kullandım ama yine de sorun aynı !!
Jeff Cook

Cevabı güncelliyorum. Basit bir başlangıç ​​yapmayı denedim ve bu yapılandırma ile işe yarıyor.
Başvurumu

9
spring-jdbc'yi spring-batch bağımlılığınızdan hariç tutabilir veya uygulama sınıfında veri kaynağı fasulye yüklemesini hariç tutabilirsiniz@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
TecHunter

mongo projesine h2 kurmak zaman kaybı ve mantıksız. bu çözüm benim için çalıştı .. @ValerioVaudi netlik için teşekkürler
Arun3x3

26

Eğer yeni bir proje bootstrap ve aynı hatayı alıyorum neden bu gelebilir merak ettiysen soruya noktasına, (gerçi ilgili olabilir), ancak artifactIdbir spring-boot-starter-data-jpabağımlılık bölümünde. Bağımlılığı aşağıda verdim. Bundan kurtulmak için veritabanını tanımlamanız gerekecek.

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

5
Benim durumumda, pom.xml'de yorumladığım spring-boot-starter-data-jdbc bağımlılığıydı ve sorun ortadan kalktı! Sanırım bu bağımlılıkları dahil etmek güzel olurdu, ancak sürücünüz ve diğer kimlik bilgileriniz hazırsa, bunlar daha sonra projenin başarıyla oluşturulması için application.properties içinde güncellenebilir.
raikumardipak

Burada açıklanan benzer bir sorunla karşılaştım. Doğrudan Mongo kullanmak yerine JPA ile oynuyordum, bu yüzden yukarıdaki bağımlılığı ekledim (Intellij aracılığıyla). JPA tarzını sevmediğime karar verdim, bu yüzden pom.xml'den yorum yaptım . İşte o zaman üstteki soruda belirtilen hatayı almaya başlamış olmalıyım. Hatayı gidermek için a çalıştırıp mvn clean installardından Intellij'den Tüm Maven Projelerini Yeniden Yüklemem gerekiyordu.
Mike

14

DataSourceAutoConfiguration.classBenim için çalışılanlar hariç :

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

veritabanı tabanlı olmayan uygulamalar için en iyi çözüm.
Doogle'sa

10

Bu bağlantı yardımcı oldu.

Spring Boot otomatik yapılandırması, sınıf yoluna eklenen bağımlılıklara göre çekirdekleri otomatik olarak yapılandırmaya çalışır. Ve sınıf yolumuzda bir JPA bağımlılığımız (spring-data-starter-jpa) olduğundan, onu yapılandırmaya çalışır.

Sorun: Spring boot, JPA veri kaynağını yani JDBC bağlantı özelliklerini yapılandırmak için gereken tüm bilgilere sahip değil. Çözümler:

  1. JDBC bağlantı özelliklerini sağlayın (en iyi)
  2. Bazı AutoConfig sınıflarını hariç tutarak bağlantı özelliklerini sağlamayı erteleyin (geçici - sonunda kaldırılmalıdır)

Yukarıdaki bağlantı DataSourceAutoConfiguration.classile

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

Ama bu benim için işe yaramadı. Bunun yerine, 2 AutoConfig sınıfını hariç tutmak zorunda kaldım:

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

Benim için çalıştı ama bunu neden açıkça dışlamam gerektiğini hala anlamadım
Saurabh Verma

hey @SaurabhVerma, sınıfları dışlamanın mantığını açıklamak için cevabı düzenledim AutoConfig.
bibangamba

Hariç sadece DataSourceAutoConfigurationbenim için çalıştı 2.2.1.RELEASEarasında spring-boot-starter-parent.
user2918640

7

"Bir Veri Kaynağı yapılandırılamadı" hatası. Öncelikle veri kaynağını tanımlayarak sorunu çözdük. Daha sonra, veri kaynağını hiç yapılandırmadan sorunun nasıl çözüleceğini tartıştık.

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


Lütfen bu cevabı biraz daha açabilir misiniz?
Sterling Okçu

1
Cevabı burada açıklamayı tercih ederim.
Deadpool

Veri bağlantısını yapılandırmak için başka bir yöntem kullanıyorsanız, application.properties içinde şu dışlamayı kullanın: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Anurag

4

Bu sizin olabilir ki kaynaklar Bahar Initializr aracılığıyla bir proje oluştururken dizin sınıf yoluna eklenmez. Dolayısıyla uygulamanız, yapılandırdığınız application.properties dosyasını hiçbir zaman yüklemiyor.

Durumun böyle olup olmadığını hızlı bir şekilde test etmek için, aşağıdakileri application.properties dosyanıza ekleyin:

server.port=8081

Şimdi uygulamanızı çalıştırırken, yay önyükleme konsolunda şuna benzer bir çıktı görmelisiniz:

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

Bağlantı noktanız hala varsayılan 8080 ise ve 8081 olarak değiştirilmediyse, application.properties dosyalarınız açıkça yüklenmiyor demektir.

Ayrıca uygulamanızın çalışıp çalışmadığını da kontrol edebilirsiniz. gradle bootRun komut satırından . Hangisi büyük olasılıkla iş olacak.

Çözüm:

  1. IntelliJ'i kapatın, ardından proje klasörünüzün içinde ".idea" klasörünü silin
  2. Projenizi IntelliJ'e aşağıdaki gibi yeniden içe aktarın: "Projeyi İçe Aktar" -> "YALNIZCA içe aktarmak için build.gradle dosyanızı seçin". (IntelliJ geri kalanını otomatik olarak alır)
  3. uygulamanızı yeniden oluşturun ve çalıştırın

IntelliJ Desteğinin resmi cevabına bakın: IDEA-221673


Benim için Kaynaklar klasörüne sağ tıklayıp "Dizini olarak işaretle" -> "Kaynaklar Kökü" nü seçmek yeterliydi.
Balazs F.

3

İlkbahar önyükleme sürümü için 2.X.Xaşağıdaki yapılandırma benim için çalıştı.

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 

Eski jdbc sürücüsü kullanımdan kaldırıldı. Yenisi yukarıdaki konfigürasyonda belirtilmiştir. Lütfen aynısını kullanın ve projeyi yeniden başlatın.



2

Bu açıklamayı ilkbahar önyükleme uygulamamın ana sınıfına ekledim ve her şey mükemmel çalışıyor

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

parçacığı nereye koyduğunuzu gösterdiniz, bu nedenle +1
Setmax

2

Bunun nedeni jpa bağımlılıklarınızın ve eklentilerinizin olması olabilir ...

kullanmıyorsanız yorum yapın (build.gradle veya pom dosyası)

Örneğin

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

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

2

Gradle kullanıyorsanız, Gradle'ı yeniden inşa etmek bu sorunu çözebilir.


Vay canına, bu benim için çözdü. Ve çözümü unutup duruyorum.
GGrec

1

Basitçe, veritabanınızı yapılandırmadan veritabanı bağımlılığı olan bir bahar başlangıç ​​kodunu indirdiğiniz anlamına gelir. Yani nasıl bağlanacağını bilmiyor. Spring boot sürümü 2.18için, düzeltmek için aşağıdaki adımları uygulayın.

  1. İndirdiğiniz sürücü için bir veritabanı oluşturun, örn mysql/mongo.
  2. Sizin de applications.propertiesdosyaya db bağlantı bilgisi ekleyin. mysqlDb'nizin mongodeğiştirilmesi durumunda örnek verilir 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. Çalışacağı sunucuyu yeniden başlatın.

1

Veri kaynağı içinde tanımlanmışsa application.resources, hemen altında bulunduğundan emin olun src/mainve bunu yapı yoluna ekleyin.


1

Pom.xml dosyanızda bir JPA bağımlılığınız varsa, onu kaldırmanız yeterlidir. Bu çözüm benim için çalıştı.


1

Bu ek açıklamayı ana java dosyasına ekleyin

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)

0

@ Valerio-vaudi söylediği için oluyor.

Sizin sorununuz, yaylı önyükleme-başlatıcı-jdbc geçişli maven bağımlılığına sahip yay grubu yaylı önyükleme başlatıcı kümesinin bağımlılığıdır.

Ancak bunu çözebilirsiniz, birincil veri kaynağını yapılandırmanızla ayarlayın

 @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

Aynı sorunu yaşadım ve yukarıdaki tüm önerileri denedim, ancak işe yaramadı. Cevabımı ileriye dönük okuyucular için gönderiyorum. Önceleri iyi çalışıyordu ama bir şekilde yeniden ortaya çıktı. Bu sorunu, bazı gereksiz eklentileri ve depoları pom.xml'den kaldırarak çözdüm

  1. Öncelikle, varsayılan paketleme türünü kavanoz olarak değiştirdim (Spring Boot Initializer, ambalajda pom veriyor )

    <packaging>jar</packaging>

  2. İstemeden bazı eklentiler ekledim:

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

Umarım cevabım birine yardımcı olur.


0

Bu MySQL için benim için çalıştı: (Uygulama özellikleri)

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

Benimkini çalıştırmak için pom.xml'deki mybatis'e eski bir bağımlılığı kaldırdım.


0

Pom.xml dosyasına "spring-boot-starter-data-jpa" bağımlılığını eklediyseniz, lütfen ilgili veritabanını h2 vb. Gibi bağımlılıkla ekleyin.


0

Yeni bir projeye başladığımda aynı hatayla karşılaşıyorum. Komut satırını kullan benim için çalışıyor.

./gradlew bootRun

-1

Modülleri içe aktarırken başka bir paketi içe aktardığınızı düşünüyorum, modüllere gidin ve hepsini kaldırın. Bundan sonra, proje paketinden modülleri içe aktarın


-1

Benim için kaynak klasörü bir maven güncellemesinde / yapısında dışlanıyordu. Yol Oluştur> Kaynak'a gittim ve src / main / kaynaklar'ın "Hariç Tutuldu **" olduğunu gördüm. Bu girişi kaldırdım (Hariç Tutulan **> Kaldır> Uygula ve Kapat'a tıklandı).

Sonra iyi çalıştı.

görüntü açıklamasını buraya girin


-3

Pom dosyasına h2 bağımlılığı eklemek bu tür sorunları çözebilir. ...... com.h2database h2 ......


Mevcut cevapla örtülü
Karl Richter

-8

Benim durumumda

spring.profiles = production // remove it to fix

içinde application.properties sebebi


5
ilgisiz, çok spesifik. Ana yapılandırmanız büyük olasılıkla productionprofille sınırlıydı, bu nedenle bu profili etkinleştirmek de sorununuzu çözecekti. buradaki sorun spring.datasourceaktif konfigürasyondaki eksik bir konfigürasyondur
TecHunter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.