Использовать базу данных по хосту в одном.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 &quot;%r&quot; %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 &quot;%r&quot; %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 в зависимости от значения хоста.

Другие вопросы по тегам