48351


EclipseにてSpring
initializrというサイトで作ったプロジェクト（mavenでwebでjpa）を解凍しEclipseにインポートしmain()を実行しようとしたところ下記のエラーとなりました。

恐らくapplication.propertiesになにか書かないといけないと思うのですがどうすればいいでしょうか。HSQLとはなんでしょうか？PCにはMySQLとPostgreSQLしか入れていません。

**表示されたエラー**

[code]

    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).
    
[/code]


CC BY-SA 4.0
2018-09-13T02:38:59.620
48348
2020-06-05T00:04:09.200
2020-06-05T00:04:09.200
3060
29623
question
java spring database spring-boot
Spring bootの起動エラー(DBアクセスに失敗か？)


JPAでDBにアクセスするアプリケーションをつくろうとしているのに、DBとそれにアクセスするために必要な定義やライブラリー（ドライバー）が無いということです。なので、以下を確認して下さい。

  * どのDBを使おうとしているか
  * 設定ファイル(`application.properties`など)に正しいDBアクセスの定義があるか
  * ライブラリーがクラスパスにあるかどうか（Mavenを使っているのであれば、使用するDBに接続するための`dependency`（例えば、`mysql-connector-java`）が`pom.xml`にあるかどうか）

> HSQLとはなんでしょうか？

Javaで実装されたRDBMSです。動作検証をしたいだけなら、MySQLなどを使うより簡単です。詳細はググって調べて下さい。


CC BY-SA 4.0
2018-09-13T03:43:45.690
48351
2018-09-13T03:43:45.690
21092
48348
answer


JDBCドライバを依存関係に追加した場合、妥当な接続設定も行う必要があります。

  *     31. Working with SQL Databases 
      * [31.1.2 Connection to a Production Database](https://docs.spring.io/spring-boot/docs/2.1.4.RELEASE/reference/html/boot-features-sql.html#boot-features-connect-to-production-database)

が該当のドキュメント記述箇所で、具体例もここにありますが、

[code]

    spring.datasource.url=jdbc:mysql://localhost/test
    spring.datasource.username=dbuser
    spring.datasource.password=dbpass
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
[/code]

のような設定が必要になります。

* * *

別解としては、出力メッセージに有る

> Consider the following:  
>  If you want an embedded database (H2, HSQL or Derby), please put it on the
> classpath.

を実施することが挙げられます。  
具体的には、 [Spring Inilializr](https://start.spring.io/) で、 `Web`, `JPA` に加え
`HSQLDB`(あるいは `H2`, `Apache Derby`)を選択します。`pom.xml` に自分で依存関係を書き加えても構いません。

そうすることで、Spring Boot の [auto-configuration 機能](https://docs.spring.io/spring-
boot/docs/2.1.4.RELEASE/reference/html/using-boot-auto-
configuration.html)により自動でSpring Data JPA 実行に必要な
[`DataSourceProperties`](https://github.com/spring-projects/spring-
boot/blob/v2.1.4.RELEASE/spring-boot-project/spring-boot-
autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java)への設定(例えばメッセージに出力されている`url`)が満たされます。  
(今回の場合に機能するのは[`DataSourceAutoConfiguration`](https://github.com/spring-
projects/spring-boot/blob/v2.1.4.RELEASE/spring-boot-project/spring-boot-
autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java#L52)です)

> if HSQLDB is on your classpath, and you have not manually configured any
> database connection beans, then Spring Boot auto-configures an in-memory
> database.

取り敢えず素早くセットアップして実行してみたいという場合や、ユニットテストを行う場合には有用でしょう。

この機能については次の記事も参考になるかと思います:

  * [Spring BootのAutoConfigureの仕組みを理解する - Qiita](https://qiita.com/kazuki43zoo/items/8645d9765edd11c6f1dd)

* * *

当面DBを使わないので設定は保留しておいて、取り敢えず正常に起動させたい(例えばWeb層の実装を始めたい)、というような場合は前述 auto-
configure 機能をoffにすることでエラーを消すこともできます。既に記載した通り今回は `DataSourceAutoConfiguration`
が効いているので、

[code]

    @SpringBootApplication
    @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
    public class So48348Application {
        public static void main(final String[] args) {
            SpringApplication.run(So48348Application.class, args);
        }
    }
    
[/code]

というような感じで、 `@EnableAutoConfiguration(exclude = ...)` で exclude 指定します。

* * *

approved な回答を見てみると具体的なプロパティ名が記載されていないのでここに書いておきます。

明示的に設定値を記述する場合に行うべきは `DataSourceProperties` に対する設定
[`spring.datasource.hogehoge`](https://github.com/spring-projects/spring-
boot/blob/v2.1.4.RELEASE/spring-boot-project/spring-boot-
autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java#L49)
であり、 具体的には次のプロパティ設定が最低限必要になるはずです。

[code]

    spring.datasource.url
    spring.datasource.username
    spring.datasource.password
    spring.datasource.driver-class-name
    
[/code]

該当するリファレンス記述箇所は[31.1.2 Connection to a Production
Database](https://docs.spring.io/spring-
boot/docs/2.1.4.RELEASE/reference/html/boot-features-sql.html#boot-features-
connect-to-production-database)です。


CC BY-SA 4.0
2019-04-25T12:01:55.780
54478
2020-06-04T18:25:28.460
2020-06-04T18:25:28.460
2808
2808
48348
answer