如何使用Tomcat定义默认上下文元素?

时间:2019-07-17 11:01:01

标签: java tomcat deployment war context.xml

我们在Tomcat 9(apache-tomcat-9.0.22)上部署了一个应用程序。

官方文档(https://tomcat.apache.org/tomcat-9.0-doc/config/context.html)表示可以定义默认上下文元素,但对我们不起作用。

我们需要定义一个数据源和一个邮件服务器。如果我们在conf/server.xml的{​​{1}}文件中定义此资源,那么它将起作用。

GlobalNamingResources

但是在生产中,我们无法修改<GlobalNamingResources> <Resource name="mail" type="javax.mail.Session"... /> <Resource name="jdbc/mydb" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"... /> </GlobalNamingResources> 文件。因此,我们需要在另一个文件中定义此资源。

如果我们使用名为ROOT.war的战争在server.xml文件中定义资源,则它会起作用:

$CATALINA_BASE/conf/[enginename]/[hostname]/ROOT.xml

此解决方案可能令人满意,但是我们的war文件必须具有不同于ROOT.war的名称(例如MyApp_v42.war),并且每次更新都会更改。我们无法在每次更新时重命名xml文件。

如果我们在<?xml version="1.0" encoding="UTF-8"?> <!-- Context configuration file for my web application --> <Context> <Resource name="mail" type="javax.mail.Session"... /> <Resource name="jdbc/mydb" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"... /> </Context> 文件或$CATALINA_BASE/conf/context.xml文件中定义资源,如文档所述,我们将获得$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default

谢谢!

1 个答案:

答案 0 :(得分:0)

一种解决方案是:

  • conf/context.xml中定义资源:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="mail" type="javax.mail.Session"... />
    <Resource name="jdbc/mydb" type="javax.sql.DataSource"... />
                               -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <Manager pathname="" />
</Context>
  • 使用webapps目录之外的部署,例如在wars/

  • ROOT.xml下创建XML文件conf/Catalina/localhost/,以定义docBase属性,并具有相对于webapps目录的路径:

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="../wars/MyApp.war"></Context>

通过这种方式:

  • conf/server.xml文件未修改
  • 不需要战争文件的名称ROOT.xml
  • 资源在conf/context.xml
  • 中定义

但是:

  • 每个.war您必须在conf/Catalina/localhost/中有一个文件
  • 战争不会自动部署
  • 如果您更改根战文件的名称,则必须修改docBase文件中的conf/Catalina/localhost/ROOT.xml属性。