[Seasar-user:22035] Re: データベース接続文字列は別の設定ファイルで管理

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2015年 2月 22日 (日) 18:54:42 JST


小林 (koichik) です。

diconにはOGNL式が書けます。

http://s2container.seasar.org/2.4/ja/ognl.html

これを利用して、プロパティの値を動的に
設定することができます。

ファイルを読み込むクラスをS2に登録する
コンポーネントとして実装できるなら、

<component name="dbConfig" class="xxx.yyy.DbConfig">
  <property name="filePath">...</property>
  <initMethod name="load" />
  ...
</component>

<component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  <property name="URL">dbConfig.getUrl("db1")</property>
  <property name="user">dbConfig.getUser("db1")</property>
  <property name="password">dbConfig.getPassword("db1")</property>
  ...

この例では、DbConfigクラスのload()メソッドで
ファイルを読み込むものとします。
データソースの設定では、DbConfigのインスタンス
メソッドである getUrl() 等を呼び出して
プロパティを設定します。


別の方法としては、

<component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  <property name="URL">@xxx.yyy.DbConfig @ getUrl("db1")</property>
  <property name="user">@xxx.yyy.DbConfig @ getUser("db1")</property>
  <property name="password">@xxx.yyy.DbConfig @ getPassword("db1")</property>
  ...

この例ではDbConfigクラスの getUrl()等は
staticメソッドで、最初に呼び出された時点で
ファイルを読み込む (そしてキャッシュする) か、
あるいはServletListenerやSevletFilterで
S2コンテナの初期化より前にファイルを
読み込んでおくことになります。


On Sun, 22 Feb 2015 09:22:31 +0900, "fsd.vdf @ gmail.com" <fsd.vdf @ gmail.com> wrote:

> お世話になります。
> sukezi3と申します。
> 
> webアプリケーションにて、
> 複数のデータベースを使用するのですが、
> そのデータベースへの接続文字列(URL、ユーザID、パスワード)は、
> diconとは別のファイルで一括管理します。
> 
> データベースの切り替えが問題ではなく、
> データベースの接続文字列はdiconに事前に設定できないことが問題です。
> 
> したがって、webアプリケーション起動後、
> 一旦、別のファイルよりデータベース接続文字列を取得し、
> その内容をdiconファイルに反映させる動きを考えていますが、
> 
> webアプリケーション起動後に
> どのようにしてdiconから作成された
> データベースへの接続文字列(URL、ユーザID、パスワード)への
> プロパティにアクセスするかが分かりません。
> 
> ご教授をお願いいたします。
> 
> 以上
> 
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user


-- 
{
  name: "Koichi Kobayashi",
  mail: "koichik @ improvement.jp",
  blog: "http://d.hatena.ne.jp/koichik/",
  twitter: "@koichik"
}



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