java 双配置源,springMVC配置双数据源

本文介绍如何使用Spring AOP和AspectJ在Spring DAO中实现数据源的动态切换,通过@DataSource注解指定不同Mapper方法对应的数据源。核心内容包括DataSource注解、DataSourceAspect切面类和DynamicDataSource动态数据源类的使用方法。
摘要由CSDN通过智能技术生成

首先是spring-dao.xml

其次是四个class

1. DataSource

package com.ssm.dataorigin;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface DataSource {

String value();

}

2. DataSourceAspect

package com.ssm.dataorigin;

import java.lang.reflect.Method;

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.reflect.MethodSignature;

public class DataSourceAspect {

public void before(JoinPoint point) {

Object target = point.getTarget();

String method = point.getSignature().getName();

Class>[] classz = target.getClass().getInterfaces();

Class>[] parameterTypes = ((MethodSignature) point.getSignature()).getMethod().getParameterTypes();

try {

Method m = classz[0].getMethod(method, parameterTypes);

if (m != null && m.isAnnotationPresent(DataSource.class)) {

DataSource data = m.getAnnotation(DataSource.class);

DynamicDataSourceHolder.putDataSource(data.value());

System.out.println(data.value());

}

} catch (Exception e) {

// TODO: handle exception

}

}

}

3. DynamicDataSource

package com.ssm.dataorigin;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DynamicDataSource extends AbstractRoutingDataSource {

@Override

protected Object determineCurrentLookupKey() {

return DynamicDataSourceHolder.getDataSouce();

}

}

4. DynamicDataSourceHolder

package com.ssm.dataorigin;

public class DynamicDataSourceHolder {

public static final ThreadLocalholder = new ThreadLocal();

public static void putDataSource(String name) {

holder.set(name);

}

public static String getDataSouce() {

return holder.get();

}

}

使用时 在Mapper方法上加注解 @DataSource 来确定要使用的源  默认源不用注解

public interface AudioModelMapper {

public ListgetAudioModelActual(AudioModel am);

@DataSource("robotoa")

public ListselectOa();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值