はじめに
Docker Compose で PostgreSQL を立てて Spring Boot アプリを開発中に「いま DB に何が入っているのか」を確認したいことがありませんか、そのたびに IntelliJ IDEA の Database ツールウィンドウでデータソースを都度追加。ホスト、ポート、ユーザー名、パスワードの同じ作業です。
Spring Debugger プラグインを入れたら、この作業がなくなりました。デバッグ実行すると、接続が自動で現れます。
今回はspring-petclinic で実際に試した記録を書きました。
ポートが毎回変わるので、登録しても次の起動で使えない
自分の環境では、Docker Compose はポートマッピングのホスト側を省略すると空いているポートが自動で割り当てられます。
postgres:
image: postgres:18.4
ports:
- "5432" # ホスト側を書かない = ランダム割り当て
petclinic のリポジトリに入っているのは - "5432:5432" で、ホスト側を固定で押さえる書き方です。手元ではこの1行だけを変えています。
この状態で 4 回起動して、ホスト側に割り当てられたポートを記録しました。
1回目 59960
2回目 59981
3回目 53747
4回目 59059
毎回違います。Database ツールウィンドウに登録しても、次の起動で変わります。
また私の環境には PostgreSQL がネイティブインストールされていて、標準ポートの 5432 を常時占有しています。
環境
| バージョン | |
|---|---|
| IntelliJ IDEA Ultimate | 2026.2 |
| Spring Debugger プラグイン | 262.8665.176 |
| spring-petclinic | Spring Boot 4.1.0 |
| PostgreSQL |
postgres:18.4(Docker 公式イメージ) |
| Docker Desktop | Server 27.4.0 |
| OS | Windows 11 |
やったこと
-
Settings | Plugins | Marketplaceで「Spring Debugger」を検索してインストール、IDE を再起動

-
spring-petclinic をプロジェクトとして開く
-
PostgresIntegrationTestsのmainメソッドを Debug 実行
3 番目のクラスは petclinic に最初から入っているものです。中身はこうなっています。
public static void main(String[] args) {
new SpringApplicationBuilder(PetClinicApplication.class)
.profiles("postgres")
.properties("spring.docker.compose.start.arguments=postgres")
.run(args);
}
Spring Boot 3.1 で入った spring-boot-docker-compose モジュールが、アプリ起動時に docker-compose.yml の postgres サービスを立ち上げ、割り当てられたポートを読んで接続情報を組み立てます。こちらも設定を書く必要がありません。
結果
Database ツールウィンドウに、実行構成名の下に現れました。
PostgresIntegrationTests
└ jdbc:postgresql://127.0.0.1:53747/petclinic [DEBUG]
末尾の [DEBUG] が Spring Debugger が登録した印です。ポート 53747 は、この起動で Compose が割り当てたものです。
同じタイミングで docker ps を叩くと一致していました。
spring-petclinic-postgres-1 postgres:18.4 0.0.0.0:53747->5432/tcp
ローカルの PostgreSQL(5432)ではなく、コンテナを掴んでいます。イントロスペクション結果のバージョン文字列も裏付けになりました。
PostgreSQL 18.4 (Debian 18.4-1.pgdg13+1)
Debian が入っているのは Docker 公式イメージのビルドだからで、Windows 版のネイティブインストールならこの表記になりません。
ツリーを展開してテーブルを開くと、owners に 10 件。コンテナに docker exec して psql で直接引いた結果と 1 件ずつ突き合わせて一致しました。同期にかかった時間は通知に「2 秒 763 ms」と出ていました。
ここまで、接続設定は一行も書いていません。
使ってみて分かったこと
初回は JDBC ドライバのダウンロードが要る
接続は現れたのに、ツリーを展開しても何も出てきませんでした。原因は IntelliJ 側に PostgreSQL の JDBC ドライバが無かったことです。
アプリが使うドライバ(Maven 依存)と、Database ツールウィンドウが使うドライバは別物でした。
通知に出ていた「ドライバーファイルのダウンロード」を押すと 42.7.13 が入り、そのあとツールウィンドウの更新ボタン(⟳)を一度押したらツリーが開きました。
ユーザーはデバッグ中にデータベースツールウィンドウの更新ボタンをクリックすることで、検出されたデータベースのテーブル表示やSQLクエリ実行が可能になります
https://www.jetbrains.com/ja-jp/help/idea/spring-debugger.html
停止すると消える
アプリを止めると接続はツリーから消えます。.idea/dataSources.xml を確認したところ、エントリだけでなくファイルごと無くなっていました。
デバッグ中だけ存在する一時的なものなので、永続的なデータソース管理の代わりにはなりません。普段使いの接続は別途登録しておく必要があります。
まとめ
Docker Compose で DB を立てて Spring Boot を書いている人にはいかがでしょうか。とくに刺さるのは、ポートが固定されていて共有の設定を自由に変えられない場合です。ホスト側を浮かせてしまえば、その環境で 5432 を握っている何かと取り合いになりません。浮かせた代わりに「起動ごとに調べて登録し直す」作業を、このプラグインが引き取ります。
私にとってよかったのは「いまどの DB につながっているのか」が一目で分かるようになったことでした。設定ファイルを読んでも答えが出ない種類の問いに、ツールウィンドウの一行が答えてくれます。ローカルの PostgreSQL とコンテナを取り違えたまま気づかない、といった事故が起きにくくなりました。
ナットウシステムからのお知らせ
弊社は JetBrains 製品に関するご質問、ご相談等を受け付けております。弊社のXまたはメールでご連絡ください。
参考


