14

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

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

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

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

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

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

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

更新

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

4

6 回答 6

25

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

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

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

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 资源,但访问它们会很麻烦。

于 2012-09-05T12:09:21.820 回答
2

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

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

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

每个使用此配置的 Web 应用程序都必须在其中包含一个资源引用web.xml引用配置 bean(或者如果使用选项 1,则引用每个 env.entry)。

于 2012-09-05T12:18:24.747 回答
1

把你的文件放在你的 webapp 的WEB-INF/classes. 这是默认的类路径目录。conf如果仅适用于 Tomcat 内部。

于 2012-09-05T12:07:04.590 回答
0

据我所知,您也可以datasource在 tomcat 中进行配置。Tomcat中的数据源

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

于 2012-09-05T11:54:25.627 回答
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 的一个实例

于 2012-09-05T12:11:13.670 回答
-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);

于 2018-01-30T14:06:22.927 回答