[Seasar-user:4272] Re: diconファイルからinitファイル読み込み

金昌圭 [E-MAIL ADDRESS DELETED]
2006年 8月 7日 (月) 12:11:03 JST


回答ありがとうございました。
そして、小林 もありがとうございました。

>     <property name="driverClassName">ENV["jdbc.driver.class"]</property>
こういう書き方はしらなかったです・・・
まだまだ勉強不足です。頑張らなきゃ・・・ありがとうございました。



----- Original Message ----- 
From: "Hideaki Suzuki" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Sent: Saturday, August 05, 2006 3:37 PM
Subject: [Seasar-user:4265] Re: diconファイルからinitファイル読み込み


> 鈴木(belltree)です。
>
> 補足(蛇足?)です。 ^^;;;
>
> どうしてもpropertiesファイルじゃなきゃイヤ!という場合には、
> こんな方法もあります。
>
> ■propertiesファイル: [org/seasar/trick/resource/env.properties]
> jdbc.driver.class=org.hsqldb.jdbcDriver
> jdbc.url=jdbc:hsqldb:hsql://localhost:9001
> jdbc.user=sa
> jdbc.password=
>
> ■環境設定用diconファイル: [org/seasar/trick/resource/env.dicon]
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
> <components>
>   <component name="ENV">
>     @org.seasar.framework.util.ResourceUtil@
>       getProperties("org/seasar/trick/resource/env.properties")
>   </component>
> </components>
>
> ■利用側diconファイル: [org/seasar/trick/resource/env.test.dicon]
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
> <components>
>   <include path="org/seasar/trick/resource/env.dicon"/>
>   <component name="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
>     <property name="driverClassName">ENV["jdbc.driver.class"]</property>
>     <property name="url">ENV["jdbc.url"]</property>
>     <property name="username">ENV["jdbc.user"]</property>
>     <property name="password">ENV["jdbc.password"]</property>
>   </component>
> </components>
>
> また、Springの
> org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
> みたいに、複数のpropertiesファイルを指定して、後勝ちルールで、
> プロパティ値をオーバーライドしたい場合には、こんな感じでできます。
>   <component name="ENV" class="java.util.Properties">
>     <initMethod name="load">
>       <arg>
>         @org.seasar.framework.util.ResourceUtil@
>           getResourceAsStream("org/seasar/trick/resource/env1.properties")
>       </arg>
>     </initMethod>
>     <initMethod name="load">
>       <arg>
>         @org.seasar.framework.util.ResourceUtil@
>           getResourceAsStream("org/seasar/trick/resource/env2.properties")
>       </arg>
>     </initMethod>
>   </component>
>
>
> PropertyPlaceholderConfigurerのignoreResourceNotFoundプロパティをtrueに
> 設定した場合の挙動を再現するには、もう1工夫必要かも…
> たとえば、こんな感じのクラスを作って…
>
> package org.seasar.trick.resource;
>
> import java.io.IOException;
> import java.util.Properties;
>
> import org.seasar.framework.exception.IORuntimeException;
> import org.seasar.framework.exception.ResourceNotFoundRuntimeException;
> import org.seasar.framework.util.ResourceUtil;
>
> public class PropertiesMixer extends Properties {
>
> private static final long serialVersionUID = -7578337136933134477L;
>
> private boolean ignoreResourceNotFound = false;
>
> public void ignoreResourceNotFound() {
> ignoreResourceNotFound = true;
> }
>
> public void load(String path) {
> if (!ResourceUtil.isExist(path)) {
> if (ignoreResourceNotFound) {
> return;
> } else {
> throw new ResourceNotFoundRuntimeException(path);
> }
> }
> try {
> load(ResourceUtil.getResourceAsStream(path));
> } catch (IOException e) {
> throw new IORuntimeException(e);
> }
> }
>
> }
>
> こんな感じで設定するとか…
>
>   <component name="ENV" class="org.seasar.trick.resource.PropertiesMixer">
>     <initMethod name="ignoreResourceNotFound"/>
>     <initMethod
name="load"><arg>"org/seasar/trick/resource/env1.properties"</arg></initMeth
od>
>     <initMethod
name="load"><arg>"org/seasar/trick/resource/env2.properties"</arg></initMeth
od>
>     <initMethod
name="load"><arg>"org/seasar/trick/resource/env3.properties"</arg></initMeth
od>
>   </component>
>
>
> ちなみにOGNLのMap書式を使って、こんな感じで指定することも可能です。
> 値の取得方法は、上記と同じです。
>   <component name="ENV">
>     #{
>       "jdbc.driver.class" : "org.hsqldb.jdbcDriver",
>       "jdbc.url"          : "jdbc:hsqldb:hsql://localhost:9001",
>       "jdbc.user"         : "sa",
>       "jdbc.password"     : ""
>     }
>   </component>
>
> ご参考までに。。。
>
> p.s.
> 上記コードはご自由にご利用下さい。
>
> /**
>  * @auther Hideaki Suzuki
>  * @contact [E-MAIL ADDRESS DELETED]
>  */
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://www.seasar.org/mailman/listinfo/seasar-user
>
>





Seasar-user メーリングリストの案内