配置Tomcat使用属性文件加载DB连接信息
Posted
技术标签:
【中文标题】配置Tomcat使用属性文件加载DB连接信息【英文标题】:Configure Tomcat to use properties file to load DB connection information 【发布时间】:2010-11-25 17:34:12 【问题描述】:创建从属性文件读取配置参数的 Tomcat 部署的公认做法是什么?
如果能够提供 WAR 文件并指定客户端只需要在特定目录中创建或编辑属性文件,那就太好了。这是一种有些常规的做事方式吗?还有比这更好的方法吗?
【问题讨论】:
【参考方案1】:我们经常通过提供一个 WAR 和一个 Context XML 文件来分发 webapps,该文件被放置到您的 tomcat/conf/Catalina/localhost
目录中,并且可以从任何路径加载 webapp。有一个参考文档here。这提供了以下优势:
如果你真的想要一个属性文件,你可以在上下文XML文件中设置一个参数指向你的属性文件,读取ServletContextListener中的参数,然后读入属性文件。
【讨论】:
【参考方案2】:我们的处理方式:
-
让客户端使用我们同意的资源名称在GlobalNamingResources 中创建一个连接池。数据库驱动程序需要位于 Tomcat 的类路径中。
我们的 war 文件包含一个 META-INF/context.xml 文件,其中有一个 ResourceLink 链接到在步骤 1 中配置的连接池。
这比简单地直接更改 context.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"/>
war 文件中的 context.xml 示例:
<Context path="/MyWebApp" docBase="MyWebApp" debug="5" reloadable="true">
<ResourceLink name="jdbc/dbconnection" global="jdbc/dbconnection"
type="javax.sql.DataSource"/>
</Context>
【讨论】:
【参考方案3】:将配置存储在战区之外是一种很好的做法。在我们的 WAR 中,我们有一个默认位置来查找属性文件。如果默认值不起作用,您可以通过 JVM 参数或在 conf/Catalina/[host] 目录的上下文片段中定义的上下文参数指定位置。例如,
<Context docBase="/server/app.war"
swallowOutput="true" unpackWAR="false" useNaming="false">
<Parameter name="config-file" value="/config/db.properties" override="true" />
</Context>
【讨论】:
以上是关于配置Tomcat使用属性文件加载DB连接信息的主要内容,如果未能解决你的问题,请参考以下文章