配置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。这提供了以下优势:

上下文参数可以在这里配置,webapp可以读取 可以在此处定义和配置数据源 WAR 实际上可以存在于文件系统的任何位置,这意味着如果 Tomcat 升级,只需将这个单一的配置文件移动到新的 Tomcat 安装,Web 应用程序和任何其他文件都可以保留在原处李>

如果你真的想要一个属性文件,你可以在上下文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连接信息的主要内容,如果未能解决你的问题,请参考以下文章

5.1properties属性

4.主配置文件详解

Tomcat使用线程池配置高并发连接

mybatis入门_配置文件的配置

在java中怎么能让tomcat启动完后,spring配置文件加载完后自动运行某个类?

读取配置文件