1.配置文件中配置多个数据库信息
2.xml中加载配置文件,设置数据源连接信息:如下,设置两个数据源(financeDataSource,ordersDataSource)
<bean id="financeDataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc_finance_driverClassName}" />
<property name="url" value="${jdbc_finance_url}" />
<property name="username" value="${jdbc_finance_username}" />
<property name="password" value="${jdbc_finance_password}" />
<!-- 连接池最大使用连接数 -->
<property name="maxActive" value="${jdbc_finance_maxActive}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${jdbc_finance_initialSize}" />
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${jdbc_finance_maxWait}" />
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="${jdbc_finance_maxIdle}" />
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${jdbc_finance_minIdle}" />
<!-- 自动清除无用连接,打开removeAbandoned功能 -->
<property name="removeAbandoned" value="${jdbc_finance_removeAbandoned}" />
<!-- 清除无用连接的等待时间 -->
<property name="removeAbandonedTimeout" value="${jdbc_finance_removeAbandonedTimeout}" />
<!-- 连接属性 -->
<property name="connectionProperties" value="clientEncoding=UTF-8" />
<!-- 开启Druid的监控统计功能 -->
<property name="filters" value="stat" />
</bean>
<bean id="ordersDataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc_orders_driverClassName}" />
<property name="url" value="${jdbc_orders_url}" />
<property name="username" value="${jdbc_orders_username}" />
<property name="password" value="${jdbc_orders_password}" />
<!-- 连接池最大使用连接数 -->
<property name="maxActive" value="${jdbc_orders_maxActive}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${jdbc_orders_initialSize}" />
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${jdbc_orders_maxWait}" />
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="${jdbc_orders_maxIdle}" />
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${jdbc_orders_minIdle}" />
<!-- 自动清除无用连接,打开removeAbandoned功能 -->
<property name="removeAbandoned" value="${jdbc_orders_removeAbandoned}" />
<!-- 清除无用连接的等待时间 -->
<property name="removeAbandonedTimeout" value="${jdbc_orders_removeAbandonedTimeout}" />
<!-- 连接属性 -->
<property name="connectionProperties" value="clientEncoding=UTF-8" />
<!-- 开启Druid的监控统计功能 -->
<property name="filters" value="stat" />
</bean>
3.新建类MultipleDataSource :将数据源放到threadLocal中,保证唯一性
public class MultipleDataSource extends AbstractRoutingDataSource {
private static final ThreadLocal<String> dataSourceKey = new InheritableThreadLocal<String>();
public static final String ORDERSCENTER_DS = "ordersDataSource";
public static final String FINANCECENTER_DS = "financeDataSource";
public static void setDataSourceKey(String dataSource) {
dataSourceKey.set(dataSource);
}
@Override
protected Object determineCurrentLookupKey() {
return dataSourceKey.get();
}
}
4.新建切面类:对指定的类使用对应的数据源
@Aspect
public class MultipleDataSourceAspectAdvice {
//模块order
@Around("execution(* com.test.orders.dao.*.*(..))")
public Object doAroundOrder(ProceedingJoinPoint jp) throws Throwable {
MultipleDataSource.setDataSourceKey("orderDataSource");
return jp.proceed();
}
//模块finance
@Around("execution(* com.test.finance.dao.*.*(..))")
public Object doAroundFinance(ProceedingJoinPoint jp) throws Throwable {
MultipleDataSource.setDataSourceKey("financeDataSource");
return jp.proceed();
}
}