<jee: jndi-lookup-default-value и использование classpath - PullRequest
0 голосов
/ 27 декабря 2011

Я действительно застрял на этом ... Помогите! :)

Я использую j2ee: jndi lookup для файла свойств. Следующее работает отлично:

<bean class="org.springframework.core.io.FileSystemResource">
    <constructor-arg>
        <jee:jndi-lookup id="myProps" jndi-name="myProps" resource-ref="true" />
    </constructor-arg>
</bean>

Однако я хочу обработать случай, когда поиск jndi завершится неудачно, но будет использоваться файл по умолчанию, расположенный в папке WEB-INF / classes. Если я использую значение по умолчанию, как показано ниже, веб-приложение выдает исключение, сообщающее, что оно не может найти файл "classpath: myprops.properties"

<bean class="org.springframework.core.io.FileSystemResource">
    <constructor-arg>
        <jee:jndi-lookup id="myProps" jndi-name="myProps" resource-ref="true"
            default-value="classpath:myprops.properties" />
    </constructor-arg>
</bean>

Однако, если я жестко закодирую конкретный путь для значения по умолчанию, то он работает нормально, но это не приемлемо в качестве окончательного решения.

Таким образом, моя проблема в том, как использовать «classpath:», чтобы он был правильно решен?

Это общее использование, которое я использую:

<bean id="authServerProperties"
     class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="location">
        <bean class="org.springframework.core.io.FileSystemResource">
            <constructor-arg>
                <jee:jndi-lookup id="myProps" jndi-name="myProps" resource-ref="true"
                    default-value="classpath:myprops.properties" />
            </constructor-arg>
        </bean>
     </property>
     .....
</bean> 

1 Ответ

1 голос
/ 28 декабря 2011

Пусть Spring использует встроенную поддержку PropertyEditor для выбора типа ресурса вместо предоставления явного компонента FileSystemResource, так как это не будет работать с ресурсами classpath (его необходимо настроить с помощью пути на файловая система). Вместо этого вы должны использовать что-то вроде

<bean id="authServerProperties"
      class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="location" ref="myProps" />
</bean>

<jee:jndi-lookup id="myProps" jndi-name="myProps" resource-ref="true"
            default-value="classpath:myprops.properties"/>

Здесь мы устанавливаем местоположение как строковое значение и разрешаем Spring преобразовать его в соответствующий тип ресурса, поэтому, если у вас есть

<env-entry>
    <env-entry-name>myProps</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>file:///Users/something/myProps.properties</env-entry-value>
</env-entry>

в вашем web.xml, он будет использовать UrlResource с указанным URL файла, в противном случае он создаст ClasspathResource для поиска файла myprops.properties.

...