2013-10-12 143 views
2

我需要使用Tomcat容器从servlet应用程序读取application.properties文件。该文件不能包含在我的war中,因此它不能以任何方式位于webapps或Tomcat根文件夹下。该文件必须在文件夹中的某处。我也不能使用FileInputStream来读取属性文件。我唯一的选择是为文件夹/目录定义一个JNDI名称,并在运行时查看JNDI属性以查找文件夹位置以读取文件。你有没有工作的例子?使用Tomcat创建文件资源JNDI

+1

JNDI方法还需要一些'InputStream' ... – home

回答

2

我已经写出了一个解决方案,自己阅读以下类似的帖子和文章。

The Context Container

Reading a global variable from tomcat with JNDI. Example not working

java:comp/env is not bound

我已经 下定义的环境我的上下文里对我的web应用程序\的conf \卡塔利娜\本地主机\ mywebapp.xml如下....

<Environment name="propertiesfilelocation" value="E:\\tmp\\application.properties" 
    type="java.lang.String" override="false"/> 

然后使用JNDI访问我的属性文件查找以获取文件名称。

Context ctx = new InitialContext(); 
    Context envCtx = (Context)ctx.lookup("java:comp/env"); 
    String propertiesFileLocation = (String) envCtx.lookup("propertiesfilelocation"); 
    LOGGER.info("String property === " + propertiesFileLocation); 

    properties.load(new FileInputStream(propertiesFileLocation)); 

@home:是的你是对的它涉及FileInputStream。然而,我对解决方案感到满意,因为我不再使用我的Java代码对我的文件夹位置进行硬编码,这使得我的应用更加便携。

0

我有一个类似的问题略有不同的方法。我也玩弄了JNDI的想法,但我发现这有点矫枉过正。

我发现了臭名昭着的Balusc的另一篇文章。它允许你指定相对于你的tomcat安装的文件夹,并在那里部署你所有的属性文件。因此,您将配置保留在应用程序的外部,但不需要为每个应用程序的每个属性文件分别进行配置。

这的链接: Where to place and how to read configuration resource files in servlet based application?

,优选的选择是如下:

放入类路径,这样就可以通过 类加载器#的getResourceAsStream(加载)与类路径相对路径:

Properties properties = new Properties(); (Thread.currentThread()。getContextClassLoader()。getResourceAsStream(“filename.properties”)); 这里filename.properties应该被放置在一个根目录 之中,这些根由webapp的默认类路径覆盖,例如, Webapp/WEB-INF/lib,Webapp/WEB-INF/classes,Appserver/lib或JRE/lib。 如果propertiesfile是特定于webapp的,最好是将它放在WEB-INF/classes中的 。如果您在IDE中开发项目,则可以将其 放在src文件夹(项目的源文件夹)中。

也可以将其放在默认的 类路径之外的某个位置,并将其路径添加到应用服务器的类路径中。在 示例Tomcat中,您可以将其配置为 Tomcat/conf/catalina.properties的shared.loader属性。

我希望这会有所帮助。

Allan

相关问题