はじめに
前回までは、サーバのメモリ上に作成したDBを操作する仕組みを学習してきました。
しかし現場では、サーバ上のメモリにあるDBを操作する機会よりも外部DBにサーバから接続する機会のほうが圧倒的に多いと思います。
そこで今回はSpringbootで外部DBにアクセスする方法について紹介していきます。
application.propertyの設定
さて外部のDBに接続する方法ですが、実は皆さんはすでに実践しています。
eclipseを利用してJSP/サーブレットのシステムを作成した際に、ローカルにあるpostgreSQLに接続しましたよね?
Springbootでも同様に、外部のDBに接続する場合はapplication.propertyに設定を記述します。

WSLからのPostgreSQLへの接続許可
これから作成するプロジェクトをWSL上に作成する場合、ローカルのPostgreSQLに接続するために接続許可の設定が必要になります。
まずがPostgreSQLの設定ファイルを編集します。
設定ファイルはデフォルトのままであれば、「C:/Peogram Files/PostgreSQL/17/data」の中にあります。
このフォルダの中にある、「pg_hba.conf」を編集します。ファイルの最下部に、host all all 172.16.0.0/12 trustと追記してください。

その次はタスクバーの検索欄から検索し、下図のアプリを選択してください。

開いたら、「受信の規則」を右クリックして「新しい規則」を選択します。
規則の種類はポート、プロトコルおよびポートはTCP、特定のローカルポートを選択して「5432」とします。操作は「接続を許可する」です。




プロファイルの項目はすべてのチェックボックスにチェックが付いていていいです。
あとはわかりやすい名前を付けて完了ボタンを押してください。
参考のサイトはこちらになります。
https://qiita.com/hachicomb/items/e29390c6ec479c6b44fd
実装
では早速Springbootの実装をしていきます。使用するプロジェクトは新規で作成しておきましょう。(プロジェクトの名称は任意で構いません。)
が、その前にテーブルを作成しておきましょう

こちらをpgadminで実行して新規テーブルを作成します。
次は、PostgreSQLを取り扱うためのライブラリの準備をしましょう。この設定はpom.xmlに記述します。青くハイライトされた部分がpom.xmlに記述されていればOKです。記述したら、mabenの再インストールをしましょう。(やり方は前に出てきた時と同じです。)

次にモデルの作成です。
Forum.javaという名前で作成します。場所はmodelフォルダを作成してその中に作っていください。


次にコントローラの実装です。ファイルはForumController.javaとします。こちらもcontrollerフォルダを作成してその中に格納します。


まだserviceが実装されていないので赤線がひかれていますが、この後実装するので無視して大丈夫です。
続いてビューの作成です。tamplateフォルダの中に作成してください。一枚目の名前はtop.htmlです

結果ページも作成しましょう。名前はresult.htmlです。

次はリポジトリを作成しましょう。
repositoryフォルダを作成してその中にファイルを作ります。ファイル名はForumRepository.javaです。

最後にサービスを作成します。
serviceフォルダに作成し、ファイルを作ります。ファイル名はForumService.javaです。

さて、今回このForumServiceがメモリ上DBの時には作らなかったものですね。
こちらはJDBCによる操作を実装するフォルダになります。新しいアノテーションとして、Transactionalというものがあります。これは、DBのトランザクション制御を自動で行う機能になります。
DBのトランザクションとは、DBのデータ編集(insertやupdate、deleteなど)が行われている際に、操作ができるユーザをロックするという仕組みです。これにより、複数のユーザが同時に編集しようとしてデータの不整合が起こることを防ぎます。
ここまでの実装が完了したら、サーバを起動してみましょう。
下記の画面が出れば起動はできています。

TitleとBodyに入力し送信ボタンを押して次の画面が出れば実装は問題ありません。画面には入力したタイトルと内容が出ます。

また、pgAdminでテーブルの中身を見てみましょう。テーブルの中にデータが登録されていると思います。

課題
上記のプログラムに機能を追加してください。
現在は、一覧画面へのリンクを押すとTOPページに戻ります。
TOPページに入力したタイトルとボディが一覧で表示されるようにしましょう。
