【困りごと】
作成中のタスク管理アプリケーションで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つが初期起動時に競合していたため、エラーとなっていました。