繁体   English   中英

配置Tomcat以使用属性文件来加载数据库连接信息

[英]Configure Tomcat to use properties file to load DB connection information

创建从属性文件中读取配置参数的Tomcat部署的可接受做法是什么?

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

我们经常通过提供WAR和Context XML文件来分发webapps,该文件放在tomcat/conf/Catalina/localhost目录中,并且可以从任何路径加载webapp。 有一个参考文件在这里 这提供了以下优点:

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

如果您确实需要属性文件,可以在指向属性文件的上下文XML文件中设置参数,在ServletContextListener中读取参数,然后读入属性文件。

我们处理这个的方式:

  1. 让客户端使用我们同意的资源名称在GlobalNamingResources中创建连接池。 数据库驱动程序需要位于Tomcat的类路径中。
  2. 我们的war文件包含META-INF / context.xml文件,这些文件具有链接到步骤1中配置的连接池的ResourceLink

这比直接更改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>

将配置存储在战区之外是一种很好的做法。 在我们的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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM