单机根据主机使用数据库.war
Use a database according to host in single .war
我有一个 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。
我是否可以使用上下文或其他方式实现此目的?
您可以使用此注释作为控制器的参数来获取主机名:
@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。
我有一个 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。
我是否可以使用上下文或其他方式实现此目的?
您可以使用此注释作为控制器的参数来获取主机名:
@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。