web-dev-qa-db-ja.com

application.propertiesファイルの正しい使い方は?

Javaプログラマーは、構成可能なすべてのパラメーターをapplication.propertiesファイルに格納し、そこから実行時にプロパティをロードするか、プログラムの起動時にロードして、構成ファイルの変数に割り当てることが推奨されます。

私がそれを使用した方法は、プログラムの実行間で微調整する必要がある変数値を格納することでした。データベース接続文字列とデータベースドメイン名をapplication.propertiesに保存することもしましたが、ローカルサーバーと運用サーバーでの実行を切り替えるときに複数の行をコメント化するのが面倒だったため、最近これらをコードに移動しました。

sql.connString=someProductionString
#sql.connString=someLocalhostString
sql.domain=productionDB
#sql.domain=localhost
mongo.connString=someProductionString
#mongo.connString=someLocalhostString
mongo.domain=productionDB
#mongo.domain=localhost

コード内に上記の行を含め、domain.isRunningOnLocal=trueapplication.propertiesを1行だけ変更する方が簡単でした。

しかし、私の上司はそれを言っています:
1。データベース接続文字列はapplication.properties自体にある必要があります。私のコードで共同作業している別の開発者は、これらの文字列が何であるかを簡単に知ることができるからです。
2。彼はまた、プログラムの実行の合間に微調整する必要がある変数がある場合、それらは、それらの変数を使用するオブジェクト内のコードに配置する必要があると述べています。
3。テスターまたはQA担当者が私のプロジェクトを使用する場合、私のapplication.propertiesファイルを、プログラムを実行している環境に関連する独自のapplication.propertiesファイルに置き換えます。

彼は私がこれらの規約を私の便宜より優先する必要があり、ジェネリック変数だけがapplication.propertiesに格納されることになっていると明確に述べました。他のすべての変数は、それらを使用するオブジェクトに対してローカルに格納されます。明らかに、プロパティファイルを特定の方法で使用するオープンソースプロジェクトがたくさんあります。

私はそれを買わないので上記のすべての理由は時間を浪費します。コード内の行のコメントとコメント解除、および/または変数の変更と再コンパイルに時間を費やすのはなぜですか?

application.propertiesの推奨される使用方法はありますか?

6
Nav

適切に設計されたサーバーアプリケーションでは、環境固有の構成データをアプリ自体(つまり、jarまたはwarファイル)から外部化する必要があります。通常、深刻なアプリケーションは、さまざまな環境(ローカル、テスト、デモ、本番環境、さまざまなクライアントの展開、地理的に冗長なバックアップサイトなど)で実行する必要があります。そのため、アプリケーション自体にapplication.propertiesファイルがある場合は、デフォルト値のみが含まれている必要があり、環境でこれらの値をオーバーライドする方法が必要です。

Spring Boot アプリケーションでは、たとえば、現在の作業ディレクトリなどからapplication.propertiesファイルを読み取ることができる場所がいくつかあり、それを使用して、上のapplication.propertiesファイルの値をオーバーライドします。クラスパス。また、プロファイルの概念もサポートしているため、コマンドライン引数を使用して、アプリ内の異なるバージョンのapplication.propertiesファイルから選択できます(外部のapplication.propertiesでオーバーライドすることもできます)。

一番下の行は:上司に、再構築せずにアプリのapplication.propertiesファイルの値をオーバーライドするための最良の方法を尋ねて、正しくセットアップできるようにする必要がありますローカルで実行します。彼が方法がないと言ったら、私はそれを実装するように頼むでしょう。ローカルで実行するためだけに、コードリポジトリから変更されたファイルを永続的に保持しなければならないのは、おかしいです。

余談ですが、もちろんそれは特定のアーキテクチャに依存しますが、実際の製品認証情報をコードベースラインに格納することは、通常、悪い考えだと思います。誰かがコードのコピーを取得すると、製品データにアクセスできるようになり、それをすべて削除する機能。

5
J. Lenthe