2017-04-19 2 views
2

J'ai une seule guerre (webapp.war) qui peut être accessible à partir de subdomain1.mydomain.com et subdomain2.mydomain.com. Je veux utiliser différentes bases de données en fonction du domaine, comme quand j'accède à subdomain1.mondomaine.com je veux utiliser "database1" et quand j'accède à subdomain2.mondomaine.com je veux utiliser "database2".Utilisez une base de données en fonction de l'hôte en .war

Je l'ai déjà configuré les hôtes 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> 

BTW, je suis en utilisant iBatis et Spring MVC.

Y at-il de toute façon que je peux réaliser ceci en utilisant un contexte ou quelque chose?

Répondre

2

Vous pouvez obtenir le nom d'hôte en utilisant cette annotation comme paramètre aux contrôleurs:

@RequestHeader String host 

Ce que je voudrais faire est de créer un emballage qui fixerait la source de données appropriée en fonction du nom d'hôte.

2 Define, 2 sources de données sqlSessionFactory et 2 MapperFactoryBean (un pour chaque domaine):

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

Ensuite, créez un service que vous utiliserez pour accéder à votre base de données. Le service utilisera mapperDomain1 ou mapperDomain2 en fonction de la valeur de l'hôte.

+0

Pouvez-vous me montrer un exemple de comment je peux le faire en utilisant l'emballage? –

+0

J'ai ajouté plus d'informations. –