Java 从tomcat读取属性

Java 从tomcat读取属性,java,tomcat,properties,Java,Tomcat,Properties,读取应用程序配置文件的最佳实践是什么。tomcat服务器中的哪些文件夹“在类路径上” 我试图将配置文件放在TOMCAT\u HOME\conf中,但仍然无法从servlet中读取它 已尝试使用此文件(conf中有app.properties文件): 我没有太多的财产也许10-15我想这不会是问题。我记得当我使用jboss时,这个问题并没有那么严重 在我的应用程序中,我还在context.xml中指定了DB connection spring,我可以在其中指定我的属性吗?或者这是如何与tomcat

读取应用程序配置文件的最佳实践是什么。tomcat服务器中的哪些文件夹“在类路径上”

我试图将配置文件放在
TOMCAT\u HOME\conf
中,但仍然无法从servlet中读取它

已尝试使用此文件(conf中有app.properties文件):

我没有太多的财产也许10-15我想这不会是问题。我记得当我使用jboss时,这个问题并没有那么严重

在我的应用程序中,我还在
context.xml
中指定了DB connection spring,我可以在其中指定我的属性吗?或者这是如何与tomcat一起工作的

我想把我的财产与我的战争/未包装的战争分开

更新


问这个问题的原因是因为我不知道我的应用程序将部署在哪里(在什么位置)

据我所知,您也可以在tomcat中配置
数据源


在此之后,您可以在应用程序中使用
数据源

将您的文件放入WEB应用程序的
WEB-INF/类中。这是默认的类路径目录
conf
if仅适用于Tomcat内部组件。

有许多不同的方法,但这取决于您的需要:

要从
$TOMCAT_HOME/conf
目录加载属性文件,您需要使用
java.io.file
对象访问它,因为类加载器(如
this.getClass().getClassLoader().getResourceAsStream(…)
能够从类路径加载文件(和类)(在
WEB-INF/classes
WEB-INF/lib
$TOMCAT_HOME/lib
下)

从Tomcat的config目录加载文件的最简单示例是:

File configDir = new File(System.getProperty("catalina.base"), "conf");
File configFile = new File(configDir, "myconfig.properties");
InputStream stream = new FileInputStream(configFile);
Properties props = new Properties();
props.load(stream);
注意,这种方法将使您的代码依赖于Tomcat(加载机制取决于Tomcat的系统属性是否可用).这是我一点也不推荐的因此,如果您将属性文件移动到类路径中的文件夹中,那么您应该能够以您尝试的方式加载它,并且您的应用程序可以部署在任何容器中


而且,您可以将您的属性配置为JNDI资源,但是访问它们会非常麻烦。

虽然它可能是一个PITA,但它也可能是一个您不知道它将部署在哪里的功能。那么您就不能“耦合”自己了

根据Java堆栈的其他部分,最好的方法通常独立于Tomcat

new ClassPathResource("**/myFile.properties")
或者,如果使用Java配置,另一个示例:

@PropertySource("classpath:META-INF/MyWeb.properties")
在纯Java中,您可以说:

InputStream stream = loader.getResourceAsStream(resourceName);

如果loader是ClassLoader的一个实例,而不是指特定配置文件的位置,我会使用JNDI绑定配置,使应用程序仅依赖于配置数据和Java EE标准。我可以看到两个选项:

>P>如果您的属性文件中只有中等数量的配置条目,则考虑通过它们在应用程序中通过JNDI进行访问并访问它们。

  • 或者,假设您想将属性保存在一个单独的属性文件中,您还可以创建一个bean来表示属性、一个工厂(使用属性文件初始化bean),并将其作为一个属性连接到JNDI。
    这样,用户甚至可以定期重新读取属性文件,而无需重新启动应用程序、在各种配置源或类似的其他需求之间切换


  • 使用此配置的每个web应用程序都必须在其
    web.xml
    中包含引用配置bean(或引用每个环境条目,如果使用了选项1)。

    apache-tomcat-7.0.78\conf文件夹中的add.properties文件
    File configDir=新文件(System.getProperty(“catalina.base”),“conf”);
    File configFile=新文件(configDir,“dashboardiframes.properties”);
    InputStream=新文件InputStream(configFile);属性=新属性();
    
    加载(流)

    感谢您的回复。我不需要数据源,我已经配置了该部分,我需要其他属性。然后,我想您正在做的一切都很好。无论应用程序部署在tomcat目录中的何处,提取文件的结构都是相同的,因此如果app.properties与deployable一起正确提供,则不会导致错误ny问题。这不是应用程序属性应该放在的位置。我知道,但如果他想把它们放在那里,这取决于他,我会给他一些线索,让他获取它们,并建议将其移动到一个classpath可用文件夹中
    InputStream stream = loader.getResourceAsStream(resourceName);