package com.test.datasources.aspect;
import java.lang.reflect.Method;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import com.test.datasources.DataSourceNames;
import com.test.datasources.DynamicDataSource;
import com.test.datasources.annotation.DataSource;
/**
* 多数据源,切面处理类
*/
@Aspect
@Component
public class DataSourceAspect implements Ordered {
protected Logger logger = LoggerFactory.getLogger(getClass());
/*
* @annotation匹配指定注解的方法
* @within匹配指定注解的类
* 注意:这里只拦截所注解的类,如果调用的是父类的方法,那么不会拦截,除非父类方法在子类中被覆盖。
*/
@Pointcut("@annotation(com.test.datasources.annotation.DataSource) || @within(com.test.datasources.annotation.DataSource)")
public void dataSourcePointCut() {
}
@Around("dataSourcePointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
MethodSignature signature = (MethodSignature) point.getSignature();
Method method = signature.getMethod();
Class<?> dataClass = Class.forName(signature.getDeclaringTypeName());
DataSource dsMethod = method.getAnnotation(DataSource.class);
DataSource dsClass = dataClass.getAnnotation(DataSource.class);
if(dsMethod != null){
//方法优先,如果方法上存在注解,则优先使用方法上的注解
DynamicDataSource.setDataSource(dsMethod.value());
logger.debug("set datasource is " + dsMethod.value());
}else if(dsClass != null){
//其次类优先,如果类上存在注解,则使用类上的注解
DynamicDataSource.setDataSource(dsClass.value());
logger.debug("set datasource is " + dsClass.value());
}else{
//如果都不存在,则使用默认
DynamicDataSource.setDataSource(DataSourceNames.FIRST);
logger.debug("set datasource is " + DataSourceNames.FIRST);
}
try {
return point.proceed();
} finally {
DynamicDataSource.clearDataSource();
logger.debug("clean datasource");
}
}
@Override
public int getOrder() {
return 1;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1、集成com.baomidou的方式,引入dynamic-datasource依赖; 2、原生的方式,基于AOP手动实现多数据源; 3、项目代码完整,包含注释,能启动测试; 博客地址:https://blog.csdn.net/u011974797/article/details/130109195
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot集成Druid多数据源.zip (38个子文件)
SpringBoot集成Druid多数据源
baomidou多数据源
pom.xml 4KB
src
test
java
main
resources
application.properties 156B
application-dev.properties 2KB
logback-spring.xml 3KB
java
com
test
ApplicationMain.java 345B
mapper
Test1Dao.java 328B
Test2Dao.java 325B
datasources
DataSourceNames.java 183B
controller
DynamicController.java 1KB
service
Test1Service.java 509B
Test2Service.java 511B
entity
Test1Entity.java 405B
Test2Entity.java 405B
config
SwaggerConfig.java 1KB
TimeZoneConfig.java 503B
WebMvcConfig.java 1KB
MyBatisConfig.java 265B
原生的多数据源
pom.xml 4KB
src
test
java
main
resources
application.properties 156B
application-dev.properties 3KB
logback-spring.xml 3KB
java
com
test
ApplicationMain.java 345B
mapper
Test1Dao.java 328B
Test2Dao.java 325B
datasources
DynamicDataSourceConfig.java 1KB
annotation
DataSource.java 491B
DataSourceNames.java 183B
aspect
DataSourceAspect.java 3KB
DynamicDataSource.java 1KB
controller
DynamicController.java 1KB
service
Test1Service.java 514B
Test2Service.java 516B
entity
Test1Entity.java 405B
Test2Entity.java 405B
config
SwaggerConfig.java 1KB
TimeZoneConfig.java 503B
WebMvcConfig.java 1KB
MyBatisConfig.java 265B
共 38 条
- 1
资源评论
涛哥是个大帅比
- 粉丝: 286
- 资源: 31
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功