使用Tomcat JNDI创建文件资源

时间:2013-10-12 05:50:33

标签: java tomcat properties jndi

我需要使用application.properties容器从servlet应用程序中读取Tomcat文件。该文件无法包含在我的war中,因此无法以任何方式置于webapps或Tomcat根文件夹下。该文件必须位于文件夹中的某个位置。我也无法使用FileInputStream来读取属性文件。我只有选项是为文件夹/目录定义JNDI名称,并在运行时查看JNDI属性以查找文件夹位置以读取文件。你有什么实际的例子吗?

2 个答案:

答案 0 :(得分:2)

我已经为自己找到了解决以下类似帖子和文章的解决方案。

The Context Container

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

java:comp/env is not bound

我在我的上下文中为我的Web应用程序定义了一个Environment \ conf \ Catalina \ localhost \ 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代码中硬编码我的文件夹位置,这使我的应用程序更具可移植性。

答案 1 :(得分:0)

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

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

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

,首选方案如下:

  

将它放在类路径中,以便您可以加载它   ClassLoader#getResourceAsStream(),带有类路径相对路径:

     

属性property = new Properties();   properties.load(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文件夹(项目的源文件夹)中。

     

您也可以将它放在默认值之外的某个位置   classpath并将其路径添加到appserver的类路径中。为了   示例Tomcat可以将其配置为shared.loader属性   的Tomcat / CONF / catalina.properties。

我希望这会有所帮助。

阿伦