可以从某些属性文件中读取Tomcat中的Web / Meta-Inf / Context.xml

时间:2009-05-18 15:16:01

标签: java

我在包含数据库连接(池)详细信息的web / meta-inf /文件夹中有context.xml。现在我希望我的应用程序的数据库详细信息由最终用户在某些属性文件和context.xml中提供,从属性文件中读取数据库连接信息,而不是直接在文件中硬编码。

tomcat是否可以从某些属性文件中替换占位符?

我读到了关于上下文管理器但不确定在哪里放置它。

请提供您的意见。

由于 阿布舍克巴克

4 个答案:

答案 0 :(得分:0)

将JNDI资源添加到Context.xml是不够的。您还需要在WEB-INF / web.xml中定义它们的用法。逐步检查this

答案 1 :(得分:0)

据我了解,您的目标是在.war之外进行应用程序配置,以允许系统管理员配置系统。

实现这一目标的一种方法是不将context.xml放在.war文件中,而是将该文件与.war一起分发。 然后必须将此文件放在CATALINA_HOME / conf / Catalina / HOSTNAME / APPLICATIONPATH.xml中(例如CATALINA_HOME / conf / Catalina / localhost / myapp.xml)。 这样,可以直接在外部上下文配置文件中编辑数据库连接信息,而无需更改.war文件,在该方案中不需要占位符。 对于用户来说,这不是最舒适的方式,因为他/她必须编辑xml文件,但对于大多数系统管理员来说这应该是可行的......

您可以在tomcat.apache.org/tomcat-5.5-doc/config/context.html找到有关tomcat上下文配置的更多信息

答案 2 :(得分:0)

我不确定是否可以从属性文件加载详细信息,但您可以在中央server.xml文件而不是context.xml中获取详细信息。一旦实现了这一点,您可以使用标准的XML实体引用来外化连接细节。

不是将数据库连接详细信息放在context.xml中,而是将它们放在某个部分下的server.xml中,然后将ResourceLink元素添加到context.xml,以在全局数据源和上下文之间创建链接

不幸的是,对于您要实现的目标,文档相当薄弱。 按照本页“资源定义”部分的说明(大约一半),特别注意它下面的(微小的)ResourceLink部分:

http://tomcat.apache.org/tomcat-5.5-doc/config/globalresources.html

答案 3 :(得分:0)

如果我在构建时没有数据库连接信息,我将只配置一个资源引用并告诉管理员他们需要为连接池提供什么名称。他们可以在Tomcat管理控制台中配置所有内容,我从来不需要知道它。这也使得构建单个WAR文件并在多个环境中使用它变得更容易,因为数据库配置细节不是WAR的一部分。

另见: Apache Tomcat 6.0 JNDI Resources

如果您在构建时知道详细信息并希望将其烘焙到WAR中,请尝试Ant filters