java - 使用 Tomcat JNDI 创建文件资源

标签 java tomcat properties jndi

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

最佳答案

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

The Context Container

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

java:comp/env is not bound

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

关于java - 使用 Tomcat JNDI 创建文件资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19331039/

相关文章:

java - Spring 启动 war 到外部tomcat

java - 从套接字读取时获取空字符串

java - Spring Boot 的执行器端点在测试期间可用

java - 如何将 map 写入包裹?

spring - 如何在使用 Maven 进行集成测试的 war 中包含测试类和配置?

c# - 如何通过接口(interface)继承在C#中重新定义一个属性?

java - 在握手期间检索公共(public)服务器证书 key

java - Spring的DeferredResult setResult与超时的交互

UML 序列图调用属性

javascript - 使用 javascript 更改 Spotfire 文档属性值