2009-09-04 75 views
30

创建从属性文件中读取配置参数的Tomcat部署的接受实践是什么?配置Tomcat以使用属性文件加载数据库连接信息

能够提供WAR文件并指定客户端只需要在特定目录中创建或编辑属性文件将会很好。这是一种有点经常的做事方式吗?有没有比这更好的方法?

回答

14

我们经常通过提供一个WAR和一个上下文XML文件来分发web应用程序,该文件被放置在您的tomcat/conf/Catalina/localhost目录中,并且可以从任何路径加载webapp。有一个参考文件here。这提供了以下优点:

  • 上下文参数可以在这里配置,以及通过Web应用
  • 数据源可以定义读取和这里配置
  • 的WAR实际上可以在文件系统中,这意味着如果在任何地方生活Tomcat升级,只有这个单独的配置文件需要移动到新的Tomcat安装,Web应用程序和任何其他文件可以留在他们的位置

如果你真的想要一个属性文件,你可以设置一个参数在上下文X中ML文件指向您的属性文件,读取ServletContextListener中的参数,然后读入属性文件。

9

我们处理这个问题的方法:

  1. 有客户在GlobalNamingResources创建一个连接池使用我们商定一个资源名称。数据库驱动程序需要位于Tomcat的类路径中。
  2. 我们的战争文件包括具有ResourceLink链接到在步骤1中

配置的连接池一个META-INF/context.xml的文件,这是一个小更前面的工作不是简单地改变环境。 XML连接信息直接,但随着时间的推移它应该得到回报。一个开发服务器将被设置为它的GlobalNamingResources指向开发,并且一个测试服务器指向测试等。然后,可以将相同的WAR文件复制到每个服务器而不用编辑任何东西。

这不是使用属性文件,但我认为它达到了相同的目标。允许用户/客户设置数据库连接信息。 GlobalNamingResource的

例子:

<Resource name="jdbc/dbconnection" auth="Container" 
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" 
url="jdbc:oracle:thin:@127.0.0.1:1546:SID" 
username="scott" password="tiger" maxActive="8" maxIdle="4" 
validationQuery="select 1 from dual" 
testOnBorrow="true"/> 

战争文件context.xml中的示例:

<Context path="/MyWebApp" docBase="MyWebApp" debug="5" reloadable="true"> 
    <ResourceLink name="jdbc/dbconnection" global="jdbc/dbconnection" 
      type="javax.sql.DataSource"/> 
</Context> 
7

这是一个很好的做法存储配置了战区。在我们的WAR中,我们有一个默认位置来查找属性文件。如果缺省值不起作用,则可以通过在conf/Catalina/[host]目录中的上下文片段中定义的JVM参数或上下文参数来指定位置。例如,

<Context docBase="/server/app.war" 
    swallowOutput="true" unpackWAR="false" useNaming="false"> 

    <Parameter name="config-file" value="/config/db.properties" override="true" /> 
</Context> 
相关问题