2012-09-05 47 views
11

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

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

使用这种尝试(存在的conf文件app.properties):

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

我没有太多的性能也许10-15我想这不会是问题。我记得当我使用jboss时,这不是问题。

在我的应用程序中,我还指定了DB连接弹簧context.xml我可以在那里指定我的属性吗?或者这对tomcat如何工作?

我想保留我的属性与战争/解压战争分开。

更新

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

回答

18

有很多不同的方式,但是这取决于你的需求:

加载从$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资源,但访问它们会有太多麻烦。

+0

这不是应用程序属性应该在的位置。 –

+3

我知道,但是如果他想把它们放在他的位置上,我会给他提供线索来获得它,并且建议将它移动到类路径可用文件夹 –

+0

现在很好。 –

0

部署据我知道你可以在Tomcat的配置datasource也。您可以在您的应用程序中使用datasource

+0

感谢您的答复。我不需要数据源我已经配置了该部分,我需要其他属性 –

+0

然后我猜你正在做的事情都很好。无论在tomcat目录中部署哪个应用程序,解压缩文件的结构都是相同的,所以如果app.properties可以部署,那么它不会引起任何问题。 –

1

将你的文件放入你的webapp的WEB-INF/classes。这是默认的类路径目录。如果仅用于Tomcat内部,则为conf

0

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

根据Java堆栈的其他部分,最好的方法通常独立于Tomcat。如果你正在使用Spring,你可以说,例如:

new ClassPathResource("**/myFile.properties") 
使用Java配置,另一个例子

,或者:

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

在普通的Java,你可以说:

InputStream stream = loader.getResourceAsStream(resourceName); 

哪里loader是ClassLoader的一个实例

1

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

  1. 如果你只在你的属性文件中等数量的配置项,然后再考虑让他们Environment Entries并通过JNDI访问这些应用程序。或者,假如你希望将你的属性保存在一个单独的属性文件中,你也可以创建一个bean来表示属性,一个工厂(使用属性文件初始化bean)并将它挂接到JNDI作为Resource Definition
    因此,人们甚至可以定期重新读取属性文件,而无需重新启动应用程序,在各种配置来源或类似的其他要求之间切换。

每个使用此配置web应用程序将必须包括Resource Reference在它的web.xml来指代配置Bean(或者每个ENV。条目的引用如果选项1被使用)。

0

添加属性文件在Apache的Tomcat的7.0.78 \ conf文件夹:

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);