一个项目中有多个数据源

问题描述 投票:0回答:1

我正在做一个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的配置,修改它自己的配置。

但我如何在运行时改变使用一个数据库或另一个数据库?

我在网上找了很多,但找不到解决方案。

我希望你的帮助。

谢谢您的帮助。

java spring oracle mybatis
1个回答
1
投票

春天的 AbstractRoutingDataSource 就是你要找的东西。它可以用来在运行时动态地改变数据源。在stack overflow和网络上的其他地方有很多例子。

© www.soinside.com 2019 - 2024. All rights reserved.