Không định cấu hình được Nguồn dữ liệu: thuộc tính 'url' không được chỉ định và không thể định cấu hình nguồn dữ liệu được nhúng


122

Tôi đang làm việc trên một ví dụ Spring Boot Batch với MongoDB và tôi đã khởi động mongodmáy chủ.

Khi tôi khởi chạy ứng dụng của mình, tôi gặp lỗi bên dưới.

Bất kỳ gợi ý cho vấn đề này?

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

Tôi đã bắt đầu mongodvới kết quả sau:

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)

nhập mô tả hình ảnh ở đây

Câu trả lời:


83

kiểm tra ứng dụng của bạn.properties

thay đổi

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

đến

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

đã làm cho tôi. Cấu hình đầy đủ:

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 trong intelij ide nằm ở đâu?
GhostDede,

5
@GhostDede hãy kiểm tra trong src / main / nguồn / application.properties
kayesh Parvez

Cảm ơn! Nó đã giúp tôi tìm ra những gì đang xảy ra trên mã của tôi.
Nghệ sĩ saxophone

55

Chỉ cần thêm: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) hoạt động cho tôi.

Tôi đã gặp lỗi tương tự mà tôi đã thử @EnableAutoConfiguration(exclude=...)nhưng không hoạt động.


điều này đã làm việc cho tôi. cảm ơn bạn
Jason

Hoạt động hoàn hảo khi tôi biết mình cần sử dụng DataSource vào một lúc nào đó nhưng không cần nó ngay lập tức.
alex

cũng đã làm việc cho tôi.
sak

38

Vấn đề của bạn là sự phụ thuộc của lô mùa xuân spring-boot-starter-batchspring-boot-starter-jdbcphụ thuộc maven bắc cầu.

Spring Batch là một khuôn khổ để xây dựng các công việc hàng loạt doanh nghiệp đáng tin cậy và chịu được lỗi. Nó hỗ trợ nhiều tính năng như khởi động lại hàng loạt không thành công, ghi lại trạng thái thực hiện hàng loạt, v.v. Để đạt được điều đó Spring Batch sử dụng lược đồ cơ sở dữ liệu để lưu trữ trạng thái của các công việc đã đăng ký, cấu hình tự động đã cung cấp cho bạn cấu hình cơ bản của nguồn dữ liệu cần thiết và chính cấu hình này yêu cầu cấu hình cơ sở dữ liệu quan hệ.

Để giải quyết điều này, bạn phải bao gồm một số tài xế cơ sở dữ liệu như mysql, h2, vv để cấu hình url.

Cập nhật : Chỉ để bắt đầu, bạn có thể định cấu hình application.yml của mình như bên dưới:

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

và tất nhiên trong bạn pom.xmlbao gồm dirver h2 như thế này:

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

Động cơ, bởi vì bạn không thể sử dụng mongo cho mục đích này, là việc sử dụng mongo chỉ được cung cấp cho người đọc mục và người viết chứ không phải để quản lý cơ sở dữ liệu nội bộ của Spring Batch là một lược đồ nội bộ, không phải là một lược đồ nghiệp vụ. Truy vấn là truy vấn SQL thuần túy và nội dung trừu tượng dựa trên cơ sở dữ liệu quan hệ. Cần có một cơ sở dữ liệu với khả năng ACID vì mỗi lô đọc và ghi một phần công việc và lưu thông tin đó để khởi động lại công việc. Giải pháp NoSql không phù hợp cho việc này.

Cuối cùng, bạn đã cấu hình một cơ sở dữ liệu quan hệ để chuẩn bị cho Spring Batch cho khả năng nội bộ, phần tóm tắt nội bộ không dựa vào mongo mà chỉ dựa trên jdbc. Sau đó, mongo có thể được sử dụng nhưng cho phía kinh doanh của lô thông qua trình đọc / ghi mục.

Tôi hy vọng rằng điều này có thể giúp bạn xóa nghi ngờ của bạn.


Đây là câu hỏi của tôi - Chúng ta vẫn cần sử dụng H2 nếu sử dụng MongoDB? Tôi đã sử dụng H2 nhưng vấn đề vẫn giống nhau !!
Jeff Cook,

Tôi cập nhật câu trả lời. Tôi đã thử bắt đầu đơn giản và với cấu hình này, nó hoạt động. Tôi có thể bắt đầu ứng dụng của tôi
Valerio Vaudi

9
bạn có thể loại trừ mùa xuân-jdbc từ phụ thuộc vào mùa xuân-batch hoặc trong lớp ứng dụng loại trừ việc bốc đậu nguồn dữ liệu@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
TecHunter

lãng phí thời gian và phi logic để cài đặt h2 trong dự án mongo. giải pháp này làm việc cho tôi .. @ValerioVaudi cảm ơn vì sự rõ ràng
Arun3x3

26

Không đến điểm của câu hỏi (có thể liên quan mặc dù), nhưng, nếu bạn bootstrap một dự án mới và tự hỏi tại sao bạn nhận được lỗi tương tự, nó có thể đến từ artifactIdcác spring-boot-starter-data-jpatrong phần phụ thuộc. Tôi đã đưa ra sự phụ thuộc bên dưới. Bạn sẽ cần phải xác định cơ sở dữ liệu để loại bỏ điều này.

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

4
Trong trường hợp của tôi, đó là sự phụ thuộc vào spring-boot-starter-data-jdbc mà tôi đã nhận xét trong pom.xml và sự cố đã biến mất! Tôi đoán sẽ rất tuyệt nếu chỉ bao gồm các phụ thuộc này nếu bạn có sẵn trình điều khiển và các thông tin đăng nhập khác, sau đó có thể cập nhật trong application.properties để dự án xây dựng thành công.
raikumardipak

Tôi gặp phải sự cố tương tự được mô tả ở đây. Tôi đang đùa giỡn với JPA thay vì trực tiếp sử dụng Mongo, vì vậy tôi đã thêm phần phụ thuộc ở trên (thông qua Intellij). Tôi quyết định rằng tôi không yêu thích cách JPA, vì vậy tôi đã nhận xét nó từ pom.xml . Đó là khi tôi phải bắt đầu nhận được lỗi được ghi trong câu hỏi ở trên cùng. Tôi cần chạy a mvn clean installvà sau đó Tải lại tất cả các dự án Maven từ Intellij để loại bỏ lỗi.
Mike

14

Ngoại trừ công DataSourceAutoConfiguration.classviệc đã làm cho tôi:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

giải pháp tốt nhất cho ứng dụng không dựa trên cơ sở dữ liệu.
Doogle

10

Liên kết này đã giúp.

Cấu hình tự động Spring Boot cố gắng cấu hình các bean tự động dựa trên các phụ thuộc được thêm vào classpath. Và bởi vì chúng ta có một phụ thuộc JPA (spring-data-starter-jpa) trên classpath của chúng ta, nó sẽ cố gắng cấu hình nó.

Vấn đề: Khởi động mùa xuân không có tất cả thông tin cần thiết để định cấu hình nguồn dữ liệu JPA, tức là thuộc tính kết nối JDBC. Các giải pháp:

  1. cung cấp các thuộc tính kết nối JDBC (tốt nhất)
  2. hoãn cung cấp các thuộc tính kết nối bằng cách loại trừ một số lớp AutoConfig (tạm thời - cuối cùng sẽ bị loại bỏ)

Liên kết trên loại trừ liên kết DataSourceAutoConfiguration.classvới

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

Nhưng điều này không hiệu quả với tôi. Thay vào đó, tôi phải loại trừ 2 lớp AutoConfig:

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

Làm việc cho tôi nhưng tôi vẫn didnt nhận được lý do tại sao tôi cần phải loại trừ nó một cách rõ ràng
Saurabh Verma

hey @SaurabhVerma, tôi đã chỉnh sửa câu trả lời để giải thích lý do hợp lý của việc loại trừ các AutoConfiglớp.
bibangamba

Trừ chỉ DataSourceAutoConfigurationlàm việc cho tôi trên 2.2.1.RELEASEcác spring-boot-starter-parent.
user2918640,

7

Lỗi “Không thể định cấu hình Nguồn dữ liệu”. Đầu tiên, chúng tôi đã khắc phục sự cố bằng cách xác định nguồn dữ liệu. Tiếp theo, chúng tôi đã thảo luận về cách khắc phục sự cố mà không cần định cấu hình nguồn dữ liệu.

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


Bạn có thể mở rộng câu trả lời này được không?
Sterling Archer

1
Tôi muốn giải thích câu trả lời ở đây.
Deadpool

Nếu sử dụng bất kỳ phương pháp nào khác để cấu hình kết nối dữ liệu, sử dụng các loại trừ sau trong application.properties: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Anurag

4

Có thể là thư mục tài nguyên của bạn không được thêm vào classpath khi tạo một dự án thông qua Spring Initializr. Vì vậy, ứng dụng của bạn không bao giờ tải tệp application.properties mà bạn đã định cấu hình.

Để kiểm tra nhanh nếu đúng như vậy, hãy thêm phần sau vào tệp application.properties của bạn:

server.port=8081

Bây giờ khi chạy ứng dụng của mình, bạn sẽ thấy trong bảng điều khiển khởi động mùa xuân xuất ra một thứ như sau:

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

Nếu cổng của bạn vẫn là mặc định 8080 và không được thay đổi thành 8081, các tệp application.properties của bạn rõ ràng là không tải.

Bạn cũng có thể kiểm tra xem ứng dụng của mình có chạy bằng gradle bootRundòng lệnh hay không. Mà rất có thể sẽ là công việc.

Giải pháp:

  1. Đóng IntelliJ, sau đó bên trong thư mục dự án của bạn xóa thư mục ".idea"
  2. Nhập lại dự án của bạn vào IntelliJ như sau: "Nhập dự án" -> "CHỈ chọn tệp build.gradle của bạn để nhập". (IntelliJ sẽ tự động lấy phần còn lại)
  3. xây dựng và chạy lại ứng dụng của bạn

Xem câu trả lời chính thức của Bộ phận hỗ trợ IntelliJ: IDEA-221673


Đối với tôi, chỉ cần nhấp chuột phải vào thư mục Tài nguyên, và chọn "Đánh dấu thư mục là" -> "Nguồn gốc".
Balazs F.

3

Đối với phiên bản khởi động mùa xuân, 2.X.Xcấu hình bên dưới phù hợp với tôi.

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 

Trình điều khiển jdbc cũ không được dùng nữa. Cái mới được đề cập ở trên cấu hình. Vui lòng sử dụng tương tự và khởi động lại dự án.


2

Tôi đã giải quyết vấn đề tương tự bằng cách thêm <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>

Nguồn: https://github.com/spring-projects/spring-boot/issues/13796#issuecomment-413313346


2

Tôi đã thêm chú thích này trên lớp chính của ứng dụng khởi động mùa xuân của mình và mọi thứ hoạt động hoàn hảo

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

bạn đã chỉ đến nơi bạn đặt đoạn mã, vì vậy +1
Setmax

2

Có thể là do bạn có các phần phụ thuộc và plugin jpa ...

chỉ cần nhận xét nó nếu không sử dụng (tệp build.gradle hoặc pom)

ví dụ

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

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

1

Nó chỉ đơn giản có nghĩa là bạn đã tải xuống mã khởi động mùa xuân với sự phụ thuộc vào cơ sở dữ liệu mà không cần định cấu hình cơ sở dữ liệu của bạn. Vì vậy, nó không biết cách kết nối. Đối với phiên bản khởi động Spring, 2.18hãy làm theo các bước dưới đây để khắc phục.

  1. Tạo cơ sở dữ liệu cho trình điều khiển bạn đã tải xuống, tức là mysql/mongov.v.
  2. Trong applications.propertiestệp của bạn, hãy thêm thông tin kết nối db. Mẫu được đưa ra cho mysqlnếu db của bạn được mongothay đổi nó cho 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. Khởi động lại máy chủ nó sẽ chạy.

1

Nếu nguồn dữ liệu được xác định trong application.resources, hãy đảm bảo rằng nó được định vị ngay bên dưới src/mainvà thêm nó vào đường dẫn xây dựng.


1

Nếu bạn đang sử dụng Gradle, xây dựng lại Gradle có thể giải quyết vấn đề này.


1

Nếu bạn có phụ thuộc JPA trong pom.xml của mình thì chỉ cần xóa nó. Giải pháp này đã làm việc cho tôi.


0

Nó xảy ra bởi vì @ valerio-vaudi cho biết.

Vấn đề của bạn là sự phụ thuộc của spring batch-boot-starter-batch có phụ thuộc maven bắc cầu spring-boot-starter-jdbc.

Nhưng bạn có thể giải quyết vấn đề này, đặt nguồn dữ liệu chính với cấu hình của bạ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

Tôi đã gặp vấn đề tương tự và đã thử tất cả các đề xuất ở trên, nhưng không hiệu quả. Tôi đang đăng câu trả lời của tôi cho độc giả thú vị. Trước khi nó hoạt động tốt nhưng bằng cách nào đó nó lại xuất hiện. Tôi đã giải quyết vấn đề này bằng cách xóa một số plugin và phần bổ sung không cần thiết khỏi pom.xml

  1. Trước hết, tôi đã thay đổi kiểu đóng gói mặc định thành jar (Spring Boot Initializer cung cấp pom trong đóng gói)

    <packaging>jar</packaging>

  2. Tôi đã vô tình thêm một số plugin:

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

Tôi hy vọng câu trả lời của tôi sẽ giúp một ai đó.


0

Cái này làm việc cho tôi, cho MySQL: (Thuộc tính ứng dụng)

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

Tôi đã loại bỏ sự phụ thuộc lỗi thời vào mybatis trong pom.xml để chạy.


0

Thêm chú thích này vào tệp java chính

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)

0

Nếu bạn đã thêm phụ thuộc "spring-boot-starter-data-jpa" trong pom.xml, Vui lòng thêm cơ sở dữ liệu tương ứng trong phụ thuộc như h2 và v.v.


0

Tôi gặp lỗi tương tự khi bắt đầu một dự án mới. Sử dụng dòng lệnh hoạt động cho tôi.

./gradlew bootRun

-1

Tôi nghĩ rằng khi nhập các mô-đun bạn đã nhập một gói khác, Hãy chuyển đến các mô-đun và loại bỏ chúng. Sau đó nhập các mô-đun từ gói của dự án


-1

Đối với tôi, thư mục tài nguyên đã bị loại trừ trên bản cập nhật / bản dựng maven. Tôi đã đi đến Đường dẫn xây dựng> Nguồn và thấy rằng src / main / resources có "Loại trừ **". Tôi đã xóa mục nhập đó (Nhấp vào Bị loại trừ **> Xóa> Áp dụng và Đóng).

Sau đó, nó hoạt động tốt.

nhập mô tả hình ảnh ở đây


-3

Thêm phụ thuộc h2 vào tệp pom có ​​thể giải quyết các vấn đề như vậy. ...... com.h2database h2 ......


Bao phủ bởi câu trả lời hiện
Karl Richter

-8

Trong trường hợp của tôi

spring.profiles = production // remove it to fix

trong application.properties là lý do


5
không liên quan, quá cụ thể. Cấu hình chính của bạn rất có thể bị giới hạn trong productionhồ sơ nên việc kích hoạt hồ sơ này cũng sẽ giải quyết được vấn đề của bạn. vấn đề ở đây là một thiếu spring.datasourceconfig vào cấu hình hoạt động
TecHunter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.