Spring MVC 配置多数据源

来源:互联网 发布:linux 移动非空目录 编辑:程序博客网 时间:2024/05/31 20:51

本来项目是一个数据源(Mysql),因为业务需求,需要添加Oracle数据源

查了很多资料之后综合了一下

环境:spring 3.0

下面是spring配置


配置两个BasicDataSource:dataSourceMySql,dataSourceOra

<bean id="dataSourceMySql" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>        <property name="url" value="jdbc:mysql://url:8192/database"></property>        <property name="username" value="user"></property>        <property name="password" value="pass"></property></bean><bean id="dataSourceOra" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>        <property name="url" value="jdbc:oracle:thin:@//url:1521/database"></property>        <property name="username" value="user"></property>        <property name="password" value="pass"></property></bean>


配置一个DynamicDataSource:dataSource

<bean id="dataSource" class="com.***.DynamicDataSource">     <!-- 通过key-value的形式来关联数据源 -->        <property name="targetDataSources">            <map key-type="java.lang.String">                <entry value-ref="dataSourceMySql" key="dataSourceMySql"></entry>                <entry value-ref="dataSourceOra" key="dataSourceOra"></entry>            </map>        </property>        <property name="defaultTargetDataSource" ref="dataSourceMySql" >        </property></bean>


配置一个SessionFactory

<bean id="sessionFactory"        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">        <property name="dataSource">            <ref bean="dataSource" />        </property>        <property name="packagesToScan">            <list>                <value>com.**.model</value>                <value>com.**.modelora</value>            </list>        </property>        <property name="hibernateProperties">            <props>                <prop key="hibernate.dialect">                    org.hibernate.dialect.MySQLDialect                </prop>                <prop key="hibernate.hbm2ddl.auto">update</prop>                <prop key="hibernate.show_sql">false</prop>                <prop key="hibernate.format_sql">true</prop>                <prop key="hibernate.jdbc.batch_size">100</prop>                <prop key="hiberante.cache.use_second_level_cache">false</prop>            </props>        </property></bean>

 

DynamicDataSource实现

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource{public static final String DATA_SOURCE_MYSQL = "dataSourceMySql";  public static final String DATA_SOURCE_ORA = "dataSourceOra"; private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();        public static void setCustomerType(String customerType) {contextHolder.set(customerType);}public static String getCustomerType() {return contextHolder.get();}public static void clearCustomerType() {contextHolder.remove();}@Overrideprotected Object determineCurrentLookupKey() {                return getCustomerType();}}



最后一步,在进入数据库操作前加上

            DynamicDataSource.setCustomerType(DynamicDataSource.DATA_SOURCE_MYSQL);

或者   

            DynamicDataSource.setCustomerType(DynamicDataSource.DATA_SOURCE_ORA);


目前有一个问题,scan出来的model(不管是第一张表的还是第二张表的)通过hibernate会自动在默认数据库里建表,导致第一个数据库里会多出空表。

暂存。


                                             
0 0