gpt4 book ai didi

java - 在单.war中根据主机使用数据库

转载 作者:行者123 更新时间:2023-11-28 21:57:48 27 4
gpt4 key购买 nike

我有一个可以从 subdomain1.mydomain.com 和 subdomain2.mydomain.com 访问的 war (webapp.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。

我是否可以使用上下文或其他方式实现此目的?

最佳答案

您可以使用此注释作为 Controller 的参数来获取主机名:

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

关于java - 在单.war中根据主机使用数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43497818/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com