私は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>
私はモンゴッドを始めました
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)
あなたの問題は、spring-boot-starter-jdbc推移的maven依存関係を持つspringバッチspring-boot-starter-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のジョブを再開するために作業のチャンクの読み取りと書き込みを行い、NoSqlはこれに適していないためです。
最後に、内部機能用のスプリングバッチを準備するためにリレーションデータベースを設定しました。内部抽象化は、jdbcでのみmongoでリレーしません。その後、mongoを使用できますが、アイテムリーダー/ライターを介してバッチのビジネス側に使用できます。
この反省があなたの疑問を解決するのに役立つことを願っています。
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
質問のポイントではありませんが(関連する可能性があります)、新しいプロジェクトをbootstrapし、なぜ同じエラーが発生するのか疑問に思った場合、artifactId
of spring-boot-starter-data-jpa
依存関係セクション。以下に依存関係を示しました。これを取り除くには、データベースを定義する必要があります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
「DataSourceの構成に失敗しました」エラー。まず、データソースを定義することで問題を修正しました。次に、データソースをまったく構成せずに問題を回避する方法について説明しました。
https://www.baeldung.com/spring-boot-failed-to-configure-data-source
スプリングブートバージョン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ドライバーは非推奨です。新しい構成は、上記の構成で言及されています。同じものを使用して、プロジェクトを再起動してください。
<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