- PR -

WEBアプリケーションのJDBC情報を外部ファイルから読み込む方法

1
投稿者投稿内容
alcyonesvx
会議室デビュー日: 2004/03/06
投稿数: 6
投稿日時: 2004-03-06 17:09
初めまして、alcyonesvxと申します。

現在、JavaでWEBアプリケーションを作成しております。
(実行環境はMiracleLinux2.1+Tomcatです)

そこで、JDBC接続情報をiniファイルのような形で、
簡単に変更出来るように保存しておきたいと思っているのですが、
うまい方法がわからず、困っています。

Propertiesファイルを使用して保存するようにしたところ、
Tomcatを手動で起動した場合と、自動で起動した場合で
読込に行くディレクトリが違うようになってしまいました。

苦肉の策で、ファイルが存在しない場合は新規作成を行い、
できたファイルの設定情報を編集して運用する方法をとったのですが、
テストしていたTurboLinuxではそれが出来たものの、
MiracleLinuxで実行してみたところ、Propertiesファイルの作成で
I/Oエラーが発生してしまいました。
(MiracleLinux上のどこかにPropertiesファイルを置けば動くのでしょうが・・・)

また、この方法では、テスト用、本番用と二つのアプリケーションを
配備してそれぞれDB接続先を変更することが出来ません。

そこで、web.xmlファイルのcontext-paramで記述することを考えたのですが、
DB接続クラスからcontextパラメータを読む方法がわかりません。
各Servletから引き継ぐようにすれば良いのでしょうが、
その場合変更がかなり大きいもので・・・。
(Servlet−Beans−DB接続クラスという作りになってしまっています)

初歩的な質問で申し訳ないのですが、
どうか宜しくお願い致します。
cypher256
会議室デビュー日: 2003/11/05
投稿数: 7
投稿日時: 2004-03-06 17:23
DBCP はどうですか?
http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/jndi-datasource-examples-howto.html
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2004-03-06 20:43
PropertiesファイルをWEB-INF/classesに置いておいて、
Class#getResourceAsStreamで読み込む、というのが一般的では?

これなら、
・カレントディレクトリに無関係にファイルを読める。
・アプリケーション毎に個々に設定ファイルを持てる。
という要件を満たします。

ResourceBundle#getBundleでも良く似たことができますが、
Class#getResourceAsStream と Properties#loadの組み合わせのほうが
扱いやすい。
NOB
常連さん
会議室デビュー日: 2004/03/02
投稿数: 49
投稿日時: 2004-03-06 23:14
つい最近、同じようなことで悩んでいましたよ。参考にしてください。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9758&forum=12
alcyonesvx
会議室デビュー日: 2004/03/06
投稿数: 6
投稿日時: 2004-03-07 10:16
Dragonfly様、coasm様、NOB様、ご回答ありがとうございます。
以下のように、Properties取得でgetResourceAsStreamを用いることで、
解決できました。

【旧】:FileInputStream fis = new FileInputStream( "db.properties" );
【新】:InputStream fis = getClass().getResourceAsStream( "db.properties" );

セッション数が多くなるような場合は、DoragonflyさんのおっしゃっているDBCPも用いて、
・Tomcatが接続コネクションプールを作成
・各アプリケーションのgetResourceAsStreamでどの接続を
 使用するかをPropertiesファイルから取得する

この方法が一番良いのかなと思いました。

Doragonfly様、coasm様、NOB様、本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)