2

spring mvc アプリケーションで jndi を次の 2 つの目的で使用したいと考えています。

  1. データソース設定
  2. プロパティ ファイルの場所を保存して、コード内で検索できるようにする

私は実際には2つのアプリケーションを持っています.1つはSpring MVCで、もう1つはSpringなので、両方に同じjndi設定を使用する予定です。

また、2 つのアプリケーションは異なるコンテナー (Tomcat と Jetty) で実行されます。私はこれまで jndi を使用したことがないので、これを 1 つの場所で定義し、両方のアプリケーションが同じ jndi ファイルを指すようにしたいと考えています (ファイルであると仮定します)。

#1に関しては、現在、Springコンテキストファイルのデータソース設定は次のとおりです。

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost/mydb_development"/>
        <property name="username" value="devuser1"/>
        <property name="password" value="123"/>

        <property name="maxActive" value="100"/>
        <property name="maxIdle" value="30"/>
        <property name="maxWait" value="1000"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="removeAbandoned" value="true"/>
        <property name="removeAbandonedTimeout" value="60"/>

        <property name="testOnBorrow" value="true"/>
        <property name="validationQuery" value="SELECT 1"/>

    </bean>

JNDI を使用するためにこれを抽出する方法を誰かに教えてもらえますか?

#2に関しては、私のコードでは現在、次のようなクラスパスにあるプロパティファイルをロードしています:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream is = classLoader.getResourceAsStream("test.properties");

今、test.propertiesファイルは私のクラスパスにあるので、そのままで動作しますが、私が知りたい/理解したいのは、何らかの方法でjndiを使用してプロパティファイルの場所を検索できるかどうかです(それが理にかなっていますか?)このファイルをクラスパスに入れる可能性があります。

私はグーグルで検索しましたが、春には次を使用してjndiを取り込むことができることを知っています:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/mysqlDataSource" />

しかし、私が理解できないのは、設定を含む実際のファイルはどこにあるのでしょうか? 私の web.xml ファイル以外の場所に置くことはできますか? (私の他のアプリケーションもSpringを使用していますが、これはデーモンであるため、web.xmlファイルがありません)。

私の目標は、jndi ファイルの値 (ユーザー名、パスワード、ファイル パスなど) を変更できるようにし、これらを jar に埋め込まないようにすることです。運用サーバーまたは開発サーバーでこれらのファイルを手動で編集し、コンテナーを再起動できるようにしたいと考えています。

4

1 に答える 1

2

私は春に少し慣れていませんが、次のような PropertyPlaceHolderConfigurer を使用したことを覚えています。

<bean id="propertyPlaceholderConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="ignoreResourceNotFound">
            <value>true</value>
        </property>
        <property name="ignoreUnresolvablePlaceholders">
            <value>true</value>
        </property>
        <property name="locations">
            <list>
                <value>file:path to your file
                </value>
                <value>file:path to another file if needed
                </value>
            </list>
        </property>
    </bean>

次に、リストで定義された .properties の値を直接使用できます。つまり、次のようなプロパティがある場合

db.driver=com.mysql.jdbc.Driver

あなたはそれを次のように使うことができます

bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
        <property name="driverClassName" value="${db.driver}"/>

値を定義したい場合。

ファイルをさらに制御したい場合は、ファイル自体へのパスをサーバーに登録し、JNDI を介して検索して、変更することができます。

file:path to your file 

の中へ

file:${propertiesFilePath}

これらの構成プロパティは、通常の JNDI ルックアップでもコードでルックアップできると確信しています。

于 2012-04-19T15:17:53.583 に答える