我想从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 and 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 and PropertyPlaceholderConfigurer中得到解答,但不知何故不适用于我的情况
先谢谢
答案 0 :(得分:0)
如果要将任何内容部署到任何应用程序服务器,最好将所有相关资源打包到部署单元(在您的情况下为war)。
要回答你的问题 - 如果你使用spring向JNDI容器注入任何东西,你也应该让spring找到适合你的一切。
所以你不能使用
new InitialContext(); // this has nothing to do with spring.
希望这会有所帮助:)
答案 1 :(得分:0)
您正在尝试(或期望)做的是“将名称值对从您的my.properties
绑定到JNDI上下文”。
<强> BUT 强>
您提到的示例并不是这样做的。只是做了以下事情
${my.name}
),那么它将从JNDI解析它(假设它已存在)bind()
方法。现在, 要解决您的问题,即获取一些方法来读取属性文件并将其绑定到JNDI树,一种方法是跟随
JndiPropertyBinder
并在其中注入jndiTemplate
。