java项目设置多数据源

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();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值