Springboot プロジェクトに動的にパラメータを渡すための Docker の実装方法

Springboot プロジェクトに動的にパラメータを渡すための Docker の実装方法

背景

最近、Docker 初心者の友人から、毎回プロジェクト構成ファイルにハードコーディングしてサービス イメージをビルドし、一連のプロセスを経てパッケージ化して公開し、構成を更新するのではなく、 docker-compose.ymlを介してマイクロサービスにパラメーターを動的に渡したいと尋ねられました。 そのため、いくつかの構成項目をdocker-compose.ymlの環境変数に直接入れて、springboot プロジェクトが環境変数からパラメーターを自動的に取得することは可能ですか?

シナリオ

データベース構成項目を含む Springboot プロジェクトがあり、異なるデータベース テスト環境 (DEV\SIT\UAT) に複数のデータベース IP があるとします。同じ Springboot プロジェクト イメージを使用する場合は、いつでもデータベース構成を切り替えることができます。つまり、Springboot アプリケーションのデータベース構成は、ハードコードされるのではなく、外部から渡す必要があります。


Springboot アプリケーションには次のようなデータベース構成があります。

spring.datasource.url = jdbc:mysql://192.168.0.11:3306/db?useUnicode=true&characterEncoding=utf8
#データベースユーザー名を設定する spring.datasource.username = sa
#データベースパスワードを設定する spring.datasource.password = sa

解決

SpEL式を使用して環境変数からデータベース構成を動的に取得する


次に、Springboot構成ファイル内のspEL式でデータベース構成を置き換えます。

# データベースリンクを構成する spring.datasource.url = jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?useUnicode=true&characterEncoding=utf8
#データベースユーザー名を設定します spring.datasource.username = ${DB_USER}
#データベースパスワードを設定する spring.datasource.password = ${DB_PASSWORD}

docker-compose.ymlでデータベースパラメータを設定する

バージョン: '3'
サービス:
 ウェブ:
  再起動: 常に
  依存:
   -db
  イメージ: springboot-app-image
  建てる: 。
  ポート:
   - 8080:8080
  環境:
   - DB_HOST=192.168.0.11
   - DB_PORT=3306
   - DB_USER=ルート
   - DB_パスワード=123456
   - DB_NAME=db
  ネットワーク:
   - クレジットファシリティネット
  展開する:
   モード: 複製
   レプリカ: 3
   再起動ポリシー:
    条件: 失敗時
    遅延: 5秒
    最大試行回数: 3
   アップデート構成:
    並列処理: 1
    遅延: 10秒

このようにして、Springbootアプリケーションはコンテナサービスを起動するときにデータベース構成を動的に取得できます。

Docker が Springboot プロジェクトに動的にパラメータを渡す方法についてはこれで終わりです。Docker Springboot の動的パラメータ渡しの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Spring Boot フロントエンドとバックエンドのパラメータ送信の実装

<<:  Vue の計算プロパティとプロパティリスニングについての簡単な説明

>>:  MySQLデータ行と行オーバーフローのメカニズムの詳細な説明

推薦する

Linux netfilter/iptables の知識ポイントの詳細な説明

ネットフィルターNetfilter は、パケット フィルタリング、転送、およびアドレス変換 NAT ...

mysql 一時テーブルの使用状況の分析 [クエリ結果は一時テーブルに保存できます]

この記事では、例を使用して MySQL 一時テーブルの使用方法を説明します。ご参考までに、詳細は以下...

MySQL 5.7.18 zip バージョンのインストール チュートリアル

MySQL の mysql 5.7.18 zip バージョンは、クリックして次のステップをクリックし...

MySQL パフォーマンス最適化のヒント

MySQL パフォーマンスの最適化MySQL はインターネット企業で広く使用されており、MySQL ...

Vant Uploaderは1枚以上の写真をアップロードするコンポーネントを実装します

この記事では、1枚以上の写真をアップロードするためのVant Uploaderコンポーネントを紹介し...

CSS3 と JavaScript を使用して Web カラー ピッカーのサンプル コードを開発する

この例の Web カラー ピッカー機能は、ページ効果を実現するために CSS3 を使用します。つまり...

Nginx で Brotli 圧縮アルゴリズムを有効にする方法の例

Brotli は、Zopfli よりも 20 ~ 26% 高い圧縮率を実現できる新しいデータ形式です...

Nexus を使用して Docker リポジトリを作成する方法

公式の Docker レジストリを使用して作成されたウェアハウスでは、イメージを削除してもデフォルト...

Mysql での結合操作

結合の種類1. 内部結合: 結合関係を持つ 2 つのテーブル内のフィールドは、結合関係を満たすレコー...

MYSQL クエリの効率を向上させる 10 の SQL ステートメント最適化テクニック

MySQL データベースの実行効率はプログラムの実行速度に大きな影響を与えます。データベースの効率的...

WeChatミニプログラムビデオ集中砲火位置ランダム

この記事では、WeChatミニプログラムのビデオ弾幕の位置をランダム化するための具体的なコードを紹介...

Docker で Redis センチネル モードを構成する方法 (複数のサーバー上)

目次序文状態DockerをインストールするRedisのマスターノードとスレーブノードを構成する序文以...

変換を使用して純粋な CSS ポップアップ メニューを実装するためのサンプル コード

序文トップメニューを作成する場合、ポップアップのセカンダリメニューを作成する必要があります。 以前の...

CentOS はローカル yum ソースを使用して LAMP 環境を構築するグラフィック チュートリアル

この記事では、ローカル yum ソースを使用して CentOS 上に LAMP 環境を構築する方法に...

データベースの冗長フィールドを合理的に使用する方法

privot は、多対多の関係の中間テーブルです。 PT5 フレームワークは自動的に privot ...