데이터 소스를 구성하지 못했습니다. 'url'속성이 지정되지 않았으며 포함 된 데이터 소스를 구성 할 수 없습니다.


123

MongoDB 로 Spring Boot Batch 예제를 작업 중이며 이미 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)

여기에 이미지 설명 입력

답변:


83

application.properties를 확인하십시오.

바꾸다

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
intelij ide의 application.properties는 어디에 있습니까?
GhostDede 2010 년

5
제발 @GhostDede SRC / 메인 / 자원 / application.properties 체크
kayesh 베즈

감사! 내 코드에서 무슨 일이 일어나는지 알아내는 데 도움이되었습니다.
색소폰 연주자

56

그냥 추가 : @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) 나를 위해 작동합니다.

내가 시도한 것과 같은 오류가 @EnableAutoConfiguration(exclude=...)작동하지 않았습니다.


어느 시점에서 DataSource를 사용해야하지만 즉시 필요하지 않을 때 완벽하게 작동합니다.
alex

나를 위해 일했습니다.
sak

39

귀하의 문제는 전 이적 인 메이븐 종속성 spring-boot-starter-batch이있는 스프링 배치의 spring-boot-starter-jdbc종속성입니다.

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 드라이버를 포함하십시오.

<?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를 사용할 수 있지만 항목 리더 / 라이터를 통해 배치의 비즈니스 측면에서 사용할 수 있습니다.

이것이 당신의 의심을 없애는 데 도움이되기를 바랍니다.


이것이 내 질문입니다. MongoDB를 사용하는 경우 여전히 H2를 사용해야합니까? 나는 H2를 사용했지만 여전히 문제는 동일합니다!
Jeff Cook

답변을 업데이트합니다. 나는 간단한 시작을 시도 했고이 구성으로 작동합니다. 신청을 시작할 수 있습니다
Valerio

9
스프링 배치 종속성에서 spring-jdbc를 제외하거나 애플리케이션 클래스에서 데이터 소스 빈로드를 제외 할 수 있습니다.@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
TecHunter

몽고 프로젝트에 h2를 설치하는 데 시간 낭비와 비논리적입니다. 이 솔루션은 나를 위해 일했습니다 .. @ValerioVaudi 명확성을 주셔서 감사합니다
Arun3x3

26

질문의 요점은 아니지만 (관련 될 수 있음) 새 프로젝트를 부트 스트랩하고 왜 동일한 오류가 발생하는지 궁금하다면 종속성 섹션 의 artifactIdof spring-boot-starter-data-jpa에서 올 수 있습니다 . 아래에 의존성을 부여했습니다. 이를 제거하려면 데이터베이스를 정의해야합니다.

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

4
제 경우에는 pom.xml에 주석을 달 았던 spring-boot-starter-data-jdbc 종속성이었고 문제는 사라졌습니다! 프로젝트를 성공적으로 빌드하기 위해 application.properties에서 업데이트 할 수있는 드라이버 및 기타 자격 증명이 준비된 경우에만 이러한 종속성을 포함하는 것이 좋을 것 같습니다.
raikumardipak

여기에 설명 된 유사한 문제가 발생했습니다. Mongo를 직접 사용하는 것과 달리 JPA를 가지고 놀았 기 때문에 Intellij를 통해 위의 종속성을 추가했습니다. 나는 JPA 방식을 좋아하지 않기로 결정했기 때문에 pom.xml에서 주석을 달았습니다 . 그때 내가 맨 위에있는 질문에 오류가 표시되기 시작했을 것입니다. 오류를 제거하려면 Intellij에서 모든 Maven 프로젝트 를 실행 한 mvn clean install다음 다시로드 해야했습니다 .
Mike

14

DataSourceAutoConfiguration.class나를 위해 일한 제외 :

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

비 데이터베이스 기반 응용 프로그램을위한 최상의 솔루션입니다.
Doogle

10

이 링크가 도움 되었습니다.

Spring Boot 자동 구성은 클래스 경로에 추가 된 종속성에 따라 자동으로 Bean을 구성하려고합니다. 그리고 클래스 경로에 JPA 종속성 (spring-data-starter-jpa)이 있으므로이를 구성하려고합니다.

문제 : 스프링 부트는 JPA 데이터 소스, 즉 JDBC 연결 속성을 구성하는 데 필요한 모든 정보를 가지고 있지 않습니다. 해결책 :

  1. JDBC 연결 속성 제공 (최상)
  2. 일부 AutoConfig 클래스를 제외하여 연결 속성 제공 연기 (임시-결국 제거해야 함)

위의 링크 DataSourceAutoConfiguration.class

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

그러나 이것은 나를 위해 작동하지 않았습니다. 대신 2 개의 AutoConfig 클래스를 제외해야했습니다.

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

나를 위해 일하지만 명시 적으로 제외해야 난 아직도 왜 didnt가 얻을
사우 라브 베르 마

안녕하세요 @SaurabhVerma, AutoConfig수업 을 제외하는 이유를 설명하기 위해 답변을 편집했습니다 .
bibangamba

제외하고는 DataSourceAutoConfiguration나를 위해 일 2.2.1.RELEASEspring-boot-starter-parent.
user2918640

7

"데이터 소스를 구성하지 못했습니다"오류. 먼저 데이터 소스를 정의하여 문제를 해결했습니다. 다음으로 데이터 소스를 구성하지 않고 문제를 해결하는 방법에 대해 설명했습니다.

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


이 답변을 확장 해 주시겠습니까?
Sterling Archer

1
나는 여기서 대답을 설명하고 싶습니다.
Deadpool

데이터 연결을 구성하는 다른 방법을 사용하는 경우 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


저에게는 Resources 폴더를 마우스 오른쪽 버튼으로 클릭하고 "Mark directory as"-> "Resources Root"를 선택하는 것으로 충분했습니다.
Balazs F.

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

스프링 부트 애플리케이션의 메인 클래스에이 주석을 추가했으며 모든 것이 완벽하게 작동합니다.

@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")

1

단순히 데이터베이스를 구성하지 않고 데이터베이스 종속성이있는 스프링 스타터 코드를 다운로드했음을 의미합니다. 그래서 연결하는 방법을 모릅니다. Spring 부트 버전의 2.18경우 아래 단계를 수행하여 수정하십시오.

  1. 다운로드 한 드라이버에 대한 데이터베이스를 만듭니다 mysql/mongo.
  2. 당신의에서 applications.properties파일 DB 연결 정보를 추가 할 수 있습니다. mysqlDB가 .NET 용으로 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

Gradle을 사용하는 경우 Gradle을 다시 빌드하면이 문제를 해결할 수 있습니다.


1

pom.xml에 JPA 종속성이 있으면 제거하십시오. 이 솔루션은 저에게 효과적이었습니다.


1

이 주석을 기본 Java 파일에 추가하십시오.

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)

0

@ valerio-vaudi가 말했기 때문에 발생합니다.

문제는 spring-boot-starter-jdbc 전이 메이븐 종속성이있는 스프링 배치 spring-boot-starter-batch의 종속성입니다.

그러나 구성으로 기본 데이터 소스를 설정하여 해결할 수 있습니다.

 @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는 패키징에 pom 을 제공합니다 ).

    <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

내 실행을 얻기 위해 pom.xml에서 mybatis에 대한 오래된 종속성을 제거했습니다.


0

pom.xml에 "spring-boot-starter-data-jpa"종속성을 추가 한 경우 h2 등과 같은 종속성에 각 데이터베이스를 추가하십시오.


0

새 프로젝트를 시작할 때 동일한 오류가 발생합니다. 나를 위해 작동하는 명령 줄을 사용하십시오.

./gradlew bootRun

-1

모듈을 가져올 때 다른 패키지를 가져온 것 같습니다. 모듈로 이동하여 모두 제거하십시오. 그 후 프로젝트의 패키지에서 모듈을 가져옵니다.


-1

나를 위해 리소스 폴더는 maven 업데이트 / 빌드에서 제외되었습니다. Build Path> Source로 이동하여 src / main / resources에 "Excluded **"가 있음을 발견했습니다. 해당 항목을 제거했습니다 (제외됨 **> 제거> 적용 및 닫기 클릭).

그런 다음 잘 작동했습니다.

여기에 이미지 설명 입력


-3

pom 파일에 h2 종속성을 추가하면 이러한 문제를 해결할 수 있습니다. ...... com.h2database h2 ......


기존 답변으로 덮여 있음
Karl Richter

-8

나의 경우에는

spring.profiles = production // remove it to fix

application.properties 이유였다


5
관련이없고 너무 구체적입니다. 기본 구성이 production프로필로 제한되었을 가능성이 높으므로이 프로필을 활성화하면 문제도 해결되었을 것입니다. 여기에서 문제는 누락 된 spring.datasource활성 구성에서 설정
TecHunter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.