从tomcat读取属性

Gan*_*row 13 java tomcat properties

阅读应用程序配置文件的最佳做法是什么?tomcat服务器中的哪些文件夹是"在类路径上".

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

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

this.getClass().getClassLoader().getResourceAsStream("/app.properties");
Run Code Online (Sandbox Code Playgroud)

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

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

我想保持我的财产与我的战争/解包战争分开.

更新

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

Alo*_*uez 22

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

要加载一个属性文件$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);
Run Code Online (Sandbox Code Playgroud)

请注意,此方法将使您的代码依赖于Tomcat(加载机制取决于Tomcat的系统属性可用的事实).这是我根本不推荐的,所以如果你将属性文件移动到类路径中的文件夹,那么你应该能够按照你尝试的方式加载它,你的应用程序可以部署在任何容器中.

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

  • 我知道,但如果他想把它们放在那里由他决定,我给他提供线索以获得它并建议将其移动到classpath可用文件夹 (4认同)