[DBFLUTE-312] {Java/C#}: 環境変数で環境ごとの設定ファイル切り替えを実現する Created: 2008-08-25  Updated: 2008-09-04  Resolved: 2008-08-26

Status: Closed
Project: DBFlute
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Major
Reporter: jflute Assignee: jflute
Resolution: Fixed Votes: 0
Labels: None


 Description   

主なターゲットは、ReplaceSchemaのenvironmentType。
しかし、DBの接続先にも同じ話が通用する。

案として:

DBFluteのbatやshの中で環境変数としてフェーズを認識するようにして、
ANTの実行時のプロパティ引数として指定できるようにする。
(なければないで動くようにする)

ANTタスクの中で、フェーズが指定されていれば、
「dfprop」配下のプロパティファイルの取得時に「dfprop/フェーズ」配下の
同じ名前のdfpropを優先してみるようにする。(あれば使う、なければデフォルト)

こうすることで、dfpropを一括で切り替え可能になる。
replaceSchemaだけ切り替えたい場合は、
replace-schema.bat(.sh)にだけその環境変数を定義すれば良い。
(replace-schema_ut.batとかreplace-schema_it.batとかを作成する)
PCの環境変数に定義すれば全てのタスクが切り替え対象になる。

基本的なターゲットは
o replaceSchemaDefinitionMap.dfprop
o databaseInfoMap.dfprop
である。
その他も切り替え対象にはなるが、必要性はこの2つだけと思われる。

しかしながら、環境変数でフェーズ(ut/it/real)を指定して、
replaceSchemaDefinitionMap.dfpropでもenvType(ut/it/real)を
指定するのは冗長なので、replaceSchemaDefinitionMap.dfpropで
environmentTypeが省略されている場合は、環境変数のフェーズを
そのままreplaceSchemaのenvironmentTypeとして扱っても良さそう。
すると、実質、replaceSchemaDefinitionMap.dfpropは切り替えなくてもよい。

【課題】
作者があまりWinコマンドやシェルに詳しくないこと。
解決策はネットで調べる。。。



 Comments   
Comment by jflute [ 2008-08-26 ]

環境変数に「DBFLUTE_ENVIRONMENT_TYPE」を設定することで
利用する設定ファイルを切り替えられるようにした。

<基本概要>
例えば、DBFLUTE_ENVIRONMENT_TYPE=abcの場合、
DBの接続先設定は「dfprop/abc/databaseInfoMap.dfprop」が評価されるようになる。
但し、存在しなければデフォルトの「dfprop/databaseInfoMap.dfprop」が評価される。

環境変数はPC上に定義してもいいし、replace-schema.bat(.sh)に直接定義してもいい。
後者の場合は、環境毎に.bat(.sh)を作り、人が環境を判断して選んで実行することが想定される。

- replace-schema_abc.bat(.sh)
- replace-schema_def.bat(.sh)

切り替えられるタスクはreplace-schemaに限らず他のタスクでも可能だが、
要件的にはreplace-schemaであることがほとんどであると想定される。
(あえて言うならoutside-sql-testもありえる)

切り替えられる設定ファイルは、dfprop配下の全ての「外だしビルドプロパティ」だが、
要件的にはdatabaseInfoMap.dfpropとreplaceSchemaDefinitionMap.dfpropだけ
であることがほとんどであると想定される。

<ReplaceSchemaとの連携>
ReplaceSchemaの登録データの切り替えは、この機能とは直接は結びつかず、
あくまでreplaceSchemaDefinitionMap.dfpropの設定で切り替えることとする。
結びつける場合は、DBFLUTE_ENVIRONMENT_TYPEの環境毎に
replaceSchemaDefinitionMap.dfpropを用意すること。
これは、実行環境のタイプと登録データのタイプが一致するとは限らないため、
このような仕様とした。(多少面倒でも単純さを優先)

<関連して仕様変更>
ReplaceSchemaの登録データの切り替え行う「タイプ」の名称を変更。
以前は「environmentType」であったが、上記機能と名称が近く紛らわしいため、
「dataLoadingType」という名称に変更した。
但し、environmentTypeでも同様に動作する(半永久的互換性として)。

Comment by jflute [ 2008-08-26 ]

> そのままreplaceSchemaのenvironmentTypeとして扱っても良さそう。
> すると、実質、replaceSchemaDefinitionMap.dfpropは切り替えなくてもよい。

DBの接続先とReplaceSchemaのデータが1:1であるとは限らないので、
ここはあえて別ものとする。

Comment by jflute [ 2008-08-25 ]

アドバイス頂きました。
ありがとうございます。

Index: _df-replace-schema.cmd
===================================================================
--- _df-replace-schema.cmd      (リビジョン 6213)
+++ _df-replace-schema.cmd      (作業コピー)
@@ -1,5 +1,4 @@
-
-
+IF "%DBFLUTE_ENVIRONMENT_TYPE%" == "" set DBFLUTE_ENVIRONMENT_TYPE=%1
set NATIVE_PROPERTIES_PATH=%1

call %DBFLUTE_HOME%\etc\cmd\_df-copy-properties.cmd %NATIVE_PROPERTIES_PATH%
Comment by jflute [ 2008-08-25 ]

環境変数は、PC自体に定義することも想定されるので、
DBFLUTE_ENVIRONMENT_TYPEという感じにする。

Generated at Mon Dec 15 10:35:20 JST 2025 using Jira 10.6.1#10060001-sha1:a6461e220f274b29ced7ac9295492f2465fe5ef5.