В Apache Tomcat вы можете настроить несколько виртуальных хостов , каждый из которых развертывает один и тот же файл .war (или базу документов) с разными параметрами конфигурации контекста, такими как JDBC-соединение, ресурсы, внешние JAR-файлы и другие.
Чтобы придерживаться своего сценария (1), в server.xml
настройте элементы хоста обоих доменов:
<Engine name="Catalina" defaultHost="subdomain1.maindomain1.com">
<Host name="subdomain1.maindomain1.com" appBase="subdomain1.maindomain1.com"/>
<Host name="anysubmain.anothermaindomain.com" appBase="anysubmain.anothermaindomain.com"/>
</Engine>
И создайте папки ресурсов и конфигурации для обоих:
mkdir $CATALINA_HOME/subdomain1.maindomain1.com
mkdir $CATALINA_HOME/anysubmain.anothermaindomain.com
mkdir $CATALINA_HOME/conf/Catalina/subdomain1.maindomain1.com
mkdir $CATALINA_HOME/conf/Catalina/anysubmain.anothermaindomain.com
Затем для каждого хоста создайте ROOT.xml
, каждый из которых указывает на одну и ту же кодовую базу (например, файл .war), но отличается конфигурацией баз данных .В общем случае это обеспечивает различную контекстную конфигурацию для каждого домена.
$CATALINA_HOME/conf/Catalina/subdomain1.maindomain1.com/ROOT.xml
<Context docBase="/path/to/your/webapp.war" path="">
<Resource name="jdbc/Database" auth="Container" type="javax.sql.DataSource"
username="subdomain1_maindomain1_com" password="anysecurepassword" driverClassName="com.your.jdbc.Driver"
url="jdbc:xyz://localhost:321/subdomain1_maindomain1_com_dbname"/>
...
</Context>
$CATALINA_HOME/conf/Catalina/anysubmain.anothermaindomain.com/ROOT.xml
<Context docBase="/path/to/your/webapp.war" path="">
<Resource name="jdbc/Database" auth="Container" type="javax.sql.DataSource"
username="anysubmain_anothermaindomain_com" password="anysecurepassword" driverClassName="com.your.jdbc.Driver"
url="jdbc:xyz://localhost:321/anysubmain_anothermaindomain_com_dbname"/>
...
</Context>
Кроме того,чтобы реализовать сценарий 2, для каждого домена вы можете настроить различные папки внешних ресурсов .
EG для anysubmain_anothermaindomain_com_dbname
в $CATALINA_HOME/conf/Catalina/anysubmain.anothermaindomain.com/ROOT.xml
<Context>
...
<Resources>
<PreResources base="/path/to/anysubmain_anothermaindomain_com_dbname/jarfiles/"
className="org.apache.catalina.webresources.DirResourceSet" readOnly="true"
internalPath="/" webAppMount="/WEB-INF/lib" />
</Resources>
...
</Context>
Таким образомвсе веб-приложения домена основаны на одной и той же docBase, но могут иметь разные (варианты) jar-файлов или другие зависимости от ресурсов.