データソースの構成に失敗しました:「url」属性が指定されておらず、埋め込みデータソースを構成できませんでした


123

私はMongoDBを使用してSpringBoot 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

5
@GhostDede src / main / resources / application.propertiesをチェックインしてください
kayeshparvez19年

ありがとう!それは私のコードで何が起こっているのかを理解するのに役立ちました。
サックス奏者

56

追加するだけです:@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) 私のために働きます。

試したのと同じエラーが発生しました@EnableAutoConfiguration(exclude=...)が、機能しませんでした。


ある時点でデータソースを使用する必要があることがわかっているが、すぐには必要ない場合に最適です。
アレックス

私も働いた。
SAK

38

あなたの問題は、推移的なMaven依存関係spring-boot-starter-batchを持つspring-boot-starter-jdbcSpringBatchの依存関係です。

Spring Batchは、信頼性が高くフォールトトレランスのエンタープライズバッチジョブを構築するためのフレームワークです。失敗したバッチの再開、バッチ実行のステータスの記録など、多くの機能をサポートしています。Spring Batchがデータベーススキーマを使用して登録済みジョブのステータスを保存することを実現するために、自動構成では、必要なデータソースの基本構成が既に提供されており、リレーショナルデータベース構成が必要なのはこの構成です。

これを解決するにmysqlh2、などのデータベースドライバを含めてを構成する必要があり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次のようなh2dirverを含めます。

<?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の使用はアイテムのリーダーとライターにのみ提供され、ビジネススキーマではなく内部スキーマであるSpringBatchの内部データベースを管理するためには提供されないことが動機です。クエリはプレーンSQLクエリであり、内部抽象化はリレーショナルデータベースに依存しています。すべてのバッチが作業のチャンクを読み書きし、ジョブを再開するためにその情報を保存するため、ACID機能を備えたデータベースが必要です。NoSqlソリューションはこれには適していません。

最後に、Spring Batchを内部機能用に準備するためにリレーショナルデータベースを構成しましたが、内部抽象化はjdbcのみにmongoに依存していません。その後、mongoを使用できますが、アイテムリーダー/ライターを介したバッチのビジネス側に使用できます。

これがあなたの疑問を解消するのに役立つことを願っています。


これが私の質問です-MongoDBを使用する場合でもH2を使用する必要がありますか?H2を使用しましたが、問題は同じです。
ジェフクック

答えを更新します。簡単な開始を試みましたが、この構成で機能します。アプリケーションを開始できます
Valerio Vaudi 2018

9
spring-jdbcをspring-batch依存関係から除外するか、アプリケーションクラスでデータソースBeanの読み込みを除外することができます@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
TecHunter 2018

mongoプロジェクトにh2をインストールするのは時間の無駄で非論理的です。このソリューションは、私のために働いた。.. @ValerioVaudi感謝を明確にするため
Arun3x3

26

ない新しいプロジェクトをブートストラップし、同じエラーが出るか、それから来るかもしれない理由を不思議に思った場合、(けれども関連することができます)、質問のポイントに、しかしartifactIdspring-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からコメントしました。そのとき、一番上の質問にエラーが記載され始めたに違いありません。私は実行するために必要なmvn clean install、その後の再読み込みすべてのMavenプロジェクトのエラーを取り除くためにのIntelliJから。
マイク

14

DataSourceAutoConfiguration.class私のために働いたものを除いて:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })

非データベースベースのアプリケーションに最適なソリューション。
ドゥーグル

10

このリンクは役に立ちました。

Spring Bootの自動構成は、クラスパスに追加された依存関係に基づいてBeanを自動的に構成しようとします。また、クラスパスに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})

私のために働いたが、それを明示的に除外する必要がある理由がまだわからなかった
SaurabhVerma19年

ちょっと@SaurabhVerma、AutoConfigクラスを除外する理由を説明するために答えを編集しました。
bibangamba

を除いDataSourceAutoConfigurationて私のために働いただけ2.2.1.RELEASEですspring-boot-starter-parent
user29186 4019年

7

「データソースの構成に失敗しました」エラー。まず、データソースを定義することで問題を修正しました。次に、データソースをまったく構成せずに問題を回避する方法について説明しました。

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


この答えを拡張していただけますか?
スターリングアーチャー

1
ここで答えを説明したいと思います。
デッドプール

データ接続を設定するための他の方法を使用している場合、application.propertiesで次の除外を使用します。spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
アヌラーグ

4

Spring Initializrを介してプロジェクトを作成するときに、リソースディレクトリがクラスパスに追加されていない可能性があります。したがって、アプリケーションは、構成したapplication.propertiesファイルをロードしません。

これが当てはまる場合に簡単なテストを行うには、application.propertiesファイルに以下を追加します。

server.port=8081

これで、アプリケーションを実行すると、Springブートコンソールに次のような出力が表示されます。

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フォルダーを右クリックし、「Markdirectoryas」->「ResourcesRoot」を選択するだけで十分でした。
Balazs F.

3

2.X.X以下のSpringBootバージョンでは、構成が機能しました。

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

Spring Bootアプリケーションのメインクラスにこのアノテーションを追加しましたが、すべてが完全に機能します

@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スターターコードをダウンロードしたことを意味します。そのため、接続方法がわかりません。Springブートバージョンの場合2.18、以下の手順を実行して修正します。

  1. ダウンロードしたドライバーのデータベースを作成しますmysql/mongo
  2. 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

  3. 実行するサーバーを再起動します。

1

データソースがで定義されapplication.resourcesている場合は、データソースが真下にあることを確認し、ビルドパスにsrc/main追加します。


1

Gradleを使用している場合は、Gradleを再構築するとこの問題を解決できます。



1

このアノテーションをメインのJavaファイルに追加します

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)

0

@ valerio-vaudiが言ったのでそれは起こっています。

あなたの問題は、spring-boot-starter-jdbc推移的なMaven依存関係を持つSpringバッチ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の更新/ビルドで除外されていました。[ビルドパス]> [ソース]に移動したところ、src / main / resourcesに「除外**」があることがわかりました。そのエントリを削除しました([除外] **> [削除]> [適用して閉じる]をクリックします)。

その後、それはうまくいきました。

ここに画像の説明を入力してください



-8

私の場合

spring.profiles = production // remove it to fix

application.properties理由でした


5
無関係、具体的すぎる。主な構成はproductionプロファイルに限定されている可能性が高いため、このプロファイルをアクティブ化すると問題も解決します。ここでの問題はspring.datasource、アクティブな構成に構成がないことです
TecHunter 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.