[Seasar-user:21348] s2configでの環境による設定切り替えについて
Kaiho Hiroshi
[E-MAIL ADDRESS DELETED]
2012年 6月 12日 (火) 19:02:55 JST
海保と申します。
初めて投稿させていただきます。
よろしくお願いいたします。
http://ml.seasar.org/archives/seasar-user/2011-June/020807.html
http://ml.seasar.org/archives/seasar-user/2011-June/020828.html
http://ml.seasar.org/archives/seasar-user/2011-July/020844.html
上記のメーリングリストを参考に、env設定による環境切り替えを行おうとしており、
その際に、期待した結果にならなかったので、内容のご確認と対応をご教示いただければと思います。
下記のようなpropertiesファイルの設定をすると、
hoge1とhoge2の項目はhoge_st.propertiesの値で上書き(fuga1, fuga2)され、
hoge3はhoge.propertiesで設定した項目がそのまま利用(hoge3)され、
結果出力は、
「fuga1,fuga2,hoge3」
を期待していたのですが、
実際には、
「fuga1,fuga2,デフォルト3」
となります。
--hoge.properties--
env=st
hoge1=hoge1
hoge2=hoge2
hoge3=hoge3
--hoge_st.properties--
hoge1=fuga1
hoge2=fuga2
s2configのユーザガイドを読んだなかでは、
「hoge_st.propertiesで定義されていない項目は上書きされない」
つまり、
「hoge_st.proertiesに項目が無く、hoge.propertiesに項目があればその値、無ければデフォルト値」
となるのが自然だと思うのですが、いかがでしょうか?
ConfigContainerImpl#finadAllConfigValue()の中のConfigContainerTraversal#forEachParent()を見ると、
子コンテナ(hoge_st.propertiesの値を保持している)から順にpropertiesファイルの値を見ており、
この際に子コンテナに存在しないキーの場合はデフォルト値を返すようになっているようです。
よろしくお願いいたします。
【環境】
s2-frameworkのバージョン 2.4.42
s2-extensionのバージョン 2.4.42
s2config-coreのバージョン 1.0.3
【設定ファイル】
--configCustomize.dicon--
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd"<http://www.seasar.org/dtd/components24.dtd%22>>
<components>
<!-- コンフィグの読み書きの実装を指定します -->
<component
class="org.seasar.config.core.config.impl.ConfigPropertiesWriter" instance="prototype"/>
<component class="org.seasar.config.core.config.impl.ConfigPropertiesReader" instance="prototype"/>
</components>
--config.dicon-
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd"<http://www.seasar.org/dtd/components24.dtd%22>>
<components>
<include path="s2config-core.dicon"/>
<component
name="configContainer" class="org.seasar.config.core.container.impl.StrictConfigContainer">
<arg><component class="org.seasar.config.core.container.impl.ConfigContainerImpl" autoBinding="none"/></arg>
<property name="configName">"hoge"</property>
</component>
</components>
--hoge.dicon-
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd"<http://www.seasar.org/dtd/components24.dtd%22>>
<components>
<include path="config.dicon"/>
<component class="jp.sample.Hoge">
<arg>configContainer.findAllConfigValue(@java.lang.String @ class, "hoge1, "デフォルト1")</arg>
<arg>configContainer.findAllConfigValue(@java.lang.String @ class, "hoge2, "デフォルト2")</arg>
<arg>configContainer.findAllConfigValue(@java.lang.String @ class, "hoge3, "デフォルト3")</arg>
</component>
</components>
--Hogeクラス-
public class Hoge {
/**
* コンストラクタ
*/
public Hoge(String h1, String h2, String h3) {
System.out.println(h1 + “,” + h2 + “,” + h3);
}
}
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <https://www.seasar.org/archives/seasar-user/attachments/20120612/00d5b6d6/attachment.html>
Seasar-user メーリングリストの案内