1

WEB.XML から env-entry を削除したい

<env-entry>
    <description>String used in masking process</description>
    <env-entry-name>default_mask</env-entry-name>
    <env-entry-value>*</env-entry-value>
    <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

だから私は(c:/ my.properties)を持つプロパティファイルを作成しました

default_mask=9999   

だから私は JndiPropertyPlaceholderConfigurer ( Spring Jndi Context および PropertyPlaceholderConfigurerから ) のような既存のソリューションを使用しようとし、Spring の applicationcontext.xml で次のように構成します。

<bean  
class="com.test.webappl.JndiPropertyPlaceholderConfigurer">  
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> 
<property name="ignoreResourceNotFound" value="true"/> 
<property name="location" value="file:c:\my.properties"/>  

Tomcat サーバーを起動すると、次のようなプロパティ ファイルが読み込まれます。

.......com.test.webappl.JndiPropertyPlaceholderConfigurer] Loading properties file from URL [file:c:/my.properties]

私が読んだとき、今Javaで

Context context = new InitialContext(); 
String resource = context.lookup("java:comp/env/default_mask");  

アプリケーションは次のエラーをスローします

**javax.naming.NameNotFoundException: Name default_mask is not bound in this Context**

また、web.xmlの私の春の設定は

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationcontext.xml</param-value>
</context-param>

私が正しい方法を使用しているかどうかは誰にもわかりますか?これはSpring Jndi Context および PropertyPlaceholderConfigurerで回答されていることは知っていますが、私の場合はどういうわけか機能しません

前もって感謝します

4

2 に答える 2

0

あなたがやろうとしている(または期待している)のは、「名前と値のペアをあなたのmy.propertiesコンテキストからJNDIコンテキストにバインドする」ことです。

しかし

あなたが参照した例はそれをしません。単に次のことをします

  1. コンテキストファイルで参照されているプロパティプレースホルダーがある場合(のように${my.name})、JNDIから解決されます(すでにそこにあると仮定します)
  2. JNDIから利用できない場合は、プロパティファイルからのデフォルトの読み取りに解決します。
  3. 変数をJNDIにバインドすることについての詳細はどこにもありません。bind()メソッドへの参照はありません。

ここで、 問題を解決するために、つまり、プロパティファイルを読み取り、それをJNDIツリーにバインドする方法を取得するには、次の1つの方法があります。

  1. クラスJndiPropertyBinderを作成して注入することができますjndiTemplate
  2. このクラスにプロパティファイルを挿入します
  3. 次に、Beanにinitフックを記述します。このフックでは、ファイル内のすべてのプロパティが読み取られ、jndiツリーにバインドされます。
  4. このBeanを非常に早くロードして、それを使用している他のすべてのBeanよりも前にロードされるようにします。
于 2012-04-25T14:32:17.903 に答える
0

アプリケーション サーバーに何かをデプロイする場合は、関連するすべてのリソースをデプロイメント ユニット (この場合は war) にパッケージ化することをお勧めします。

あなたの質問に答えるには、Spring を使用して JNDI コンテナーに何かを注入している場合は、Spring にすべてを検索させる必要があります。

だから使えない

new InitialContext(); // this has nothing to do with spring.

お役に立てれば :)

于 2012-04-25T14:19:57.403 に答える