たなかのJava日記

どんなことをやったか(学んだか)、どこで詰まったか(わからなかったか)、どこで工夫したかの記録です。

【DBエラー】DB操作用クラス導入後にエラーが発生した件...

【困りごと】

作成中のタスク管理アプリケーションでDBを接続した後、

最初の画面が完成したので、試しにアクセスしたが画面が表示されない

 

【エラー内容】

ブラウザの画面にWhitelabel Error Pageとの表示

IDEのログはメモするのを忘れてしまったのですが、

BeanCreationException: Error creating bean with name

などがありました。

これは、同じURLに対して、複数のControllerが割り当てられたとのエラーです。
解決策:@RequestMapping/@GetMapping/@PostMappingの値に重複がないか確認する。

上記は問題ありませんでした。

その他、エラーもありましたが鍵となるものはありませんでした。

 

【エラー時の詳細/原因の仮説】

正常な動作の確認ができたのは、

DB導入直前なので、それ以降の可能性が高いと考えました。

そのため、DB導入時から行ったことを洗い出しました。

 

■可能性が高い箇所(確認が必要な箇所)

pom.xmlへの依存関係の追加(DBの依存関係の部分)

pom.xmlへの依存関係の追加(Spring JDBCの依存関係の部分)

application.propertiesへの設定の追加(JDBCドライバやDBアクセスの設定の追加部分)

DB初期化用のスクリプトが実行されているか?

DB操作用のクラスの作成(詳細は以下)

・フィールドとコンストラクタの宣言

・テーブルにタスク情報を追加するaddメソッド

・テーブルのタスク情報を全て取得するfindAllメソッド

Javaのクラスの修正(HomeControllerクラス)

・DB操作用クラスのフィールドとコンストラクタの追加

・addItemメソッドをDBを使用するように操作

・listItemメソッドをDBを使用するように操作

 

【検証結果】

pom.xmlへの依存関係の追加(DBの依存関係の部分)

⇒〇

pom.xmlへの依存関係の追加(Spring JDBCの依存関係の部分)

⇒〇

application.propertiesへの設定の追加(JDBCドライバやDBアクセスの設定の追加部分)

⇒〇

DB初期化用のスクリプトが実行されているか?

⇒×

DB操作用のクラスの作成(詳細は以下)

⇒全て〇

・フィールドとコンストラクタの宣言

・テーブルにタスク情報を追加するaddメソッド

・テーブルのタスク情報を全て取得するfindAllメソッド

Javaのクラスの修正(HomeControllerクラス)

⇒全て〇

・DB操作用クラスのフィールドとコンストラクタの追加

・addItemメソッドをDBを使用するように操作

・listItemメソッドをDBを使用するように操作

 

■NGの箇所

・DB初期化用のスクリプトが実行されているか

上記だけがNGだったので、ここら辺のチェックが必要です。

 

まず、アプリケーション起動時にあらかじめ用意されたSQL文を実行するように設定したのでそちらを確認しました。

しかし、WebでDBコンソールの確認(アクセス)ができませんでした。

ということは、初期起動が出来ていない可能性が高いです。

初期実行SQL文にも問題ありませんでした。

 

しかし、そこでsqlファイルが2つ用意されているのに気付きました。

・data.spl

・schema.sql

 

結論から言うと、data.splが邪魔をしていたのが原因です。

こちらを削除したところ解決しました。

 

ちなみに、data.sqlは何も記載していません。

 

では、なぜ何も記載していないdata.splが存在したのか?

それは、いずれどちらも使うだろうと用意していたためです。

(結局最後まで使用しませんでした)

 

起動時のSQL実行を有効にしている場合は、

data.splまたはschema.sqlという名前のファイルを用意してそこに記述します。

data.splは、レコードの追加などを行うSQL文の記述に使用し

schema.sqlは、テーブル作成などを行うSQL文の記述に使用します。

この2つが初期起動時に競合していたため、エラーとなっていました。