ssm多个配置文件配置多个数据源

网上动态切换数据源不能满足我当前应用,来回切换会造成性能问题导致崩溃。而且在某个方法上用注解切换确实不是个好的办法。于是想到在最顶层代码考虑考虑。下面是我的配置:
web.xml里初始化多个spring-mybatis.xml文件

<context-param> <!--全局范围内环境参数初始化-->
        <param-name>contextConfigLocation</param-name>          <!--参数名称-->
        <param-value>classpath:spring-mybatis.xml,classpath:spring-mybatis1.xml</param-value>     <!--参数取值,逗号隔开-->
    </context-param>

然后是spring-mybatis.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

        http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    <!-- 自动扫描 -->
    <context:component-scan base-package="com.tzc.webapi.service" />
    <!-- 引入配置文件 -->
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>

<!--slave库 -->

    <bean id="DataSource1" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${slave.jdbc.driverClassName}" />
        <property name="url" value="${slave.jdbc.url}" />
        <property name="username" value="${slave.jdbc.username}" />
        <property name="password" value="${slave.jdbc.password}" />


        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="${initialSize}" />
        <property name="minIdle" value="${minIdle}" />
        <property name="maxActive" value="${maxActive}" />

        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${maxWait}" />
    </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="DataSource1" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="typeAliasesPackage" value="com.tzc.webapi.bean"></property>
        <property name="mapperLocations" value="classpath:slave/*.xml"></property>
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.tzc.webapi.dao.user"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
    <bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="DataSource" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="typeAliasesPackage" value="com.tzc.webapi.bean"></property>
        <property name="mapperLocations" value="classpath:master/*.xml"></property>
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.tzc.webapi.dao.book"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory1"></property>
    </bean>
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="DataSource1" />
    </bean>
    <!-- 使用annotation注解方式配置事务 -->
    <!--<tx:annotation-driven transaction-manager="transactionManager"/>-->
    <!--<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>-->
    <!--<bean name="myAspectJ" class="com.tzc.webapi.dbRouting.DynamicDataSourceAspect"/>-->

</beans>
spring-mybatis1.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    <!-- 自动扫描 -->
    <context:component-scan base-package="com.tzc.webapi.service" />
    <!-- 引入配置文件 -->
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>

    <!--master库-->
    <bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${master.jdbc.driverClassName}" />
        <property name="url" value="${master.jdbc.url}" />
        <property name="username" value="${master.jdbc.username}" />
        <property name="password" value="${master.jdbc.password}" />
        <property name="initialSize" value="${initialSize}" />
        <property name="minIdle" value="${minIdle}" />
        <property name="maxActive" value="${maxActive}" />
        <property name="maxWait" value="${maxWait}" />
    </bean>

    <bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="DataSource" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="typeAliasesPackage" value="com.tzc.webapi.bean"></property>
        <property name="mapperLocations" value="classpath:master/*.xml"></property>
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.tzc.webapi.dao.book"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory1"></property>
    </bean>
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="DataSource" />
    </bean>

</beans>

测试:
在这里插入图片描述
在这里插入图片描述

测试通过。从不同的数据源拿到了数据。

总结:其实就是不同的数据源扫描不同的mapper文件,扫描不同的dao。在目的数据库拿到数据。ok

猜你喜欢

转载自blog.csdn.net/qq_40212198/article/details/89376949