从tomcat读取属性

时间:2012-09-05 11:50:27

标签: java tomcat properties

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

我尝试将配置文件放在TOMCAT_HOME\conf中,但我仍无法从我的servlet中读取它。

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

this.getClass().getClassLoader().getResourceAsStream("/app.properties");

我没有太多属性可能10-15我认为这不会有问题。我记得当我使用jboss时,这不是问题。

在我的应用程序中,我还在context.xml中指定数据库连接弹簧我可以在那里以某种方式指定我的属性吗?或者这如何与tomcat一起使用?

我想让我的财产与我的战争/解包战争分开。

更新

提出这个问题的原因是因为我不知道我的应用程序将在何处部署(在哪个位置)

6 个答案:

答案 0 :(得分:21)

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

要从$TOMCAT_HOME/conf目录加载属性文件,您需要使用java.io.File对象访问它,因为类加载器(如this.getClass().getClassLoader().getResourceAsStream(...)中只能加载文件(和类) )来自您的班级路径(WEB-INF/classesWEB-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资源,但访问它们会非常麻烦。

答案 1 :(得分:1)

将您的文件放入您的网络应用WEB-INF/classes。这是默认的类路径目录。 conf仅适用于Tomcat内部。

答案 2 :(得分:1)

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

  1. 如果您的属性文件中只有中等数量的配置条目,那么请考虑将它们Environment Entries并通过应用程序中的JNDI访问它们。

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

  3. 使用此配置的每个Web应用程序都必须在其web.xml中包含Resource Reference以引用配置bean(或者如果使用选项1,则引用每个环境条目)。< / p>

答案 3 :(得分:0)

据我所知,您也可以在tomcat中配置datasourceDataSource in Tomcat

在此之后,您可以在应用程序中使用datasource

答案 4 :(得分:0)

虽然它可能是PITA,但它可能也是一个您不知道将在何处部署的功能。你不能把自己“结合”到那个事实上!

根据Java堆栈的其余部分,最佳方式通常独立于Tomcat。如果你使用Spring,你可以说:例如:

new ClassPathResource("**/myFile.properties")

或者如果使用Java Config,另一个例子:

@PropertySource("classpath:META-INF/MyWeb.properties")

在普通的Java中你可以说:

InputStream stream = loader.getResourceAsStream(resourceName);

其中loader是ClassLoader的实例

答案 5 :(得分:-1)

add .properties file in apache-tomcat-7.0.78\conf folder File configDir = new File(System.getProperty("catalina.base"), "conf");     File configFile = new File(configDir, "dashboardiframes.properties");     InputStream stream = new FileInputStream(configFile);Properties properties = new Properties(); properties.load(stream);