目前有两种思路:
1.动态切换数据源,需要自定义一个数据源类继承自AbstractRoutingDataSource抽象类,这种方式有弊端,如果是并发系统中,当你把数据源改了,系统中所有的操作数据源都改了,即使你立马再改回去,还是有风险;
2.建立两套数据源,在spring加载Mapper时关联不同的数据源。
以下仅介绍第二种方式:
(1)新建两套数据源:
数据源一:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 配置DataSource数据源 -->
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
destroy-method="close">
<!-- 数据库驱动 -->
<property name="driverClass" value="${jdbc_driverClassName}" />
<!-- 相应驱动的jdbcUrl -->
<property name="jdbcUrl" value="${jdbc_url}" />
<!-- 数据库的用户名 -->
<property name="username" value="${jdbc_username}" />
<!-- 数据库的密码 -->
<property name="password" value="${jdbc_password}" />
<!-- /** Maximum age of an unused connection before it is closed off. */ -->
<!-- 设置分区个数。这个参数默认为1,建议3-4(根据特定应用程序而定)。
为了减少锁竞争和改善性能,从当前线程分区(thread-affinity)中获取一个connection,
也就是这个样子:partitions[Thread.currentThread().getId() % partitionCount]。
当拥有充足的短期(short-lived)的线程时候,这个参数设置越大,性能越好。
当超过一定的阀值时,连接池的维护工作就可能对性能造成一定的负面影响(仅当分区上的connection使用耗尽时) -->
<property name="partitionCount" value="${db.partitionCount}" />
<!-- 设置每个分区含有connection最大个数。这个参数默认为2。如果小于2,BoneCP将设置为50。
比如:partitionCount设置为3,maxConnectionPerPartition设置为5,你就会拥有总共15个connection。
注意:BoneCP不会将这些connection一起创建出来,而是说在需要更多connection的时候从minConnectionsPerPartition参数开始逐步地增长connection数量。 -->
<property name="maxConnectionsPerPartition" value="${db.maxConnectionsPerPartition}" />
<!-- 设置每个分区含有connection最大小个数。这个参数默认为0。 -->
<property name="minConnectionsPerPartition" value="${db.minConnectionsPerPartition}" />
<!-- 设置分区中的connection增长数量。这个参数默认为1。
当每个分区中的connection大约快用完时,BoneCP动态批量创建connection,
这个属性控制一起创建多少个connection(不会大于maxConnectionsPerPartition)。
注意:这个配置属于每个分区的设置。 -->
<property name="acquireIncrement" value="${db.acquireIncrement}" />
<!-- 设置连接池阀值。这个参数默认为20。如果小于0或是大于100,BoneCP将设置为20。
连接池观察线程(PoolWatchThread)试图为每个分区维护一定数量的可用connection。
这个数量趋