我们在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
。
谢谢!
答案 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
conf/Catalina/localhost/
中有一个文件docBase
文件中的conf/Catalina/localhost/ROOT.xml
属性。