我正在做一个java项目,在这个项目中,我必须根据变量中的一个值将一些数据存储在一个DB或另一个DB中。对于数据库的管理,我使用myBatis。
对数据库的配置,我使用的是myBatis.xml。
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<context:component-scan base-package="com.nombreCompañia.ajax.service" />
<context:annotation-config />
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/DB1</value>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource_DB2" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/DB2</value>
</property>
</bean>
<bean id="transactionManager_DB2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource_DB2" />
</bean>
<tx:annotation-driven />
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlSessionFactory_DB2" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource_DB2" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.iberdrola.persistence.dao" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
我在web.xml中声明资源
<resource-ref id="ResourceRef_5">
<description>Base de datos 1</description>
<res-ref-name>jdbc/DB1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref id="ResourceRef_0">
<description>Base de datos 2</description>
<res-ref-name>jdbc/DB2</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
我之所以这样做,是因为对于数据库1,我没有遇到任何问题,它对我来说是正确的,所以我决定复制第二个DB的配置,修改它自己的配置。
但我如何在运行时改变使用一个数据库或另一个数据库?
我在网上找了很多,但找不到解决方案。
我希望你的帮助。
谢谢您的帮助。
春天的 AbstractRoutingDataSource
就是你要找的东西。它可以用来在运行时动态地改变数据源。在stack overflow和网络上的其他地方有很多例子。