Использовать базу данных по хосту в одном.war
У меня есть одна война (webapp.war), к которой можно получить доступ с subdomain1.mydomain.com и subdomain2.mydomain.com.
Я хочу использовать разные базы данных в зависимости от домена, например, когда я получаю доступ к subdomain1.mydomain.com, я хочу использовать "database1", а когда я получаю доступ к subdomain2.mydomain.com, я хочу использовать "database2".
Я уже настроил хосты в tomcat server.xml:
<Host name="subdomain1.mydomain.com" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="subdomain1_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="C:/apache-tomcat-8.0.35/webapps/webapp"
debug="0" reloadable="true"/>
</Host>
<Host name="subdomain2.mydomain.com" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="subdomain2_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="C:/apache-tomcat-8.0.35/webapps/webapp"
debug="0" reloadable="true"/>
</Host>
Кстати, я использую iBatis и Spring MVC.
Есть ли в любом случае я могу добиться этого с помощью контекста или что-то?
1 ответ
Вы можете получить имя хоста, используя эту аннотацию в качестве параметра для контроллеров:
@RequestHeader String host
Я хотел бы создать оболочку, которая будет устанавливать соответствующий источник данных в зависимости от имени хоста.
Определите 2 источника данных, 2 sqlSessionFactory и 2 MapperFactoryBean (по одному для каждого домена):
<bean id="sqlSessionFactoryDomain1" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource1" />
</bean>
<bean id="sqlSessionFactoryDomain2" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource2" />
</bean>
<bean id="mapperDomain1" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.your.mapper.interface" />
<property name="sqlSessionFactory" ref="sqlSessionFactoryDomain1" />
</bean>
<bean id="mapperDomain2" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.your.mapper.interface" />
<property name="sqlSessionFactory" ref="sqlSessionFactoryDomain2" />
</bean>
Затем создайте сервис, который вы будете использовать для доступа к вашей базе данных. Служба будет использовать либо mapperDomain1, либо mapperDomain2 в зависимости от значения хоста.