我需要使用application.properties
容器从servlet应用程序中读取Tomcat
文件。该文件无法包含在我的war
中,因此无法以任何方式置于webapps或Tomcat
根文件夹下。该文件必须位于文件夹中的某个位置。我也无法使用FileInputStream
来读取属性文件。我只有选项是为文件夹/目录定义JNDI
名称,并在运行时查看JNDI
属性以查找文件夹位置以读取文件。你有什么实际的例子吗?
答案 0 :(得分:2)
我已经为自己找到了解决以下类似帖子和文章的解决方案。
Reading a global variable from tomcat with JNDI. Example not working
我在我的上下文中为我的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。
我希望这会有所帮助。
阿伦