gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:11:44 29 4
gpt4 key购买 nike

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

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

我们需要定义一个数据源和一个邮件服务器。如果我们在 conf/server.xml 中定义此资源文件在 GlobalNamingResources它有效。

<GlobalNamingResources>
<Resource name="mail" type="javax.mail.Session"... />
<Resource name="jdbc/mydb" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"... />
</GlobalNamingResources>

但是在生产中,我们不能修改server.xml文件。所以我们需要在另一个文件中定义这个资源。

如果我们在 $CATALINA_BASE/conf/[enginename]/[hostname]/ROOT.xml 中定义资源带有名为 ROOT.war 的 war 的文件,它有效:

<?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>

这个解决方案可能令人满意,但我们的 war 文件必须具有与 ROOT.war 不同的名称(如 MyApp_v42.war),并且它会随着每次更新而改变。我们不能每次更新都重命名 xml 文件。

如果我们在 $CATALINA_BASE/conf/context.xml 中定义资源文件或 $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default文件之类的文件说我们获得了 javax.naming.NameNotFoundException .

提前致谢!

最佳答案

一个解决方案是:

  • 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/

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

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

这样:

  • conf/server.xml 文件未修改
  • war 文件名不是必需的 ROOT.xml
  • 资源定义在conf/context.xml

但是:

  • 你必须在 conf/Catalina/localhost/ 中为每个 .war 包含一个文件
  • war 不是自动部署的
  • 如果更改根 war 文件的名称,则必须修改 conf/Catalina/localhost/ROOT.xml 文件中的 docBase 属性。

关于java - 如何使用 Tomcat 定义默认上下文元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57074349/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com