2017-04-19 51 views
2

我有一個可以從subdomain1.mydomain.com和subdomain2.mydomain.com訪問的war(webapp.war)。根據主機在單個.war中使用數據庫

我想根據域使用不同的數據庫,就像當我訪問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。

無論如何,我可以實現這一點使用上下文或什麼?

回答

2

你可以使用這個註釋作爲參數傳遞給控制器​​獲取主機名:

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

+0

你能告訴我一個如何使用包裝器做到這一點的例子嗎? –

+0

我添加了更多信息。 –

相關問題