12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package com.ruoyi.framework.aspectj;
- import java.util.Objects;
- 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.annotation.AnnotationUtils;
- import org.springframework.core.annotation.Order;
- import org.springframework.stereotype.Component;
- import com.ruoyi.common.annotation.DataSource;
- import com.ruoyi.common.utils.StringUtils;
- import com.ruoyi.framework.datasource.DynamicDataSourceContextHolder;
- /**
- * 多数据源处理
- *
- * @author ruoyi
- */
- @Aspect
- @Order(1)
- @Component
- public class DataSourceAspect {
- protected Logger logger = LoggerFactory.getLogger(getClass());
- @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)"
- + "|| @within(com.ruoyi.common.annotation.DataSource)")
- public void dsPointCut() {
- }
- @Around("dsPointCut()")
- public Object around(ProceedingJoinPoint point) throws Throwable {
- DataSource dataSource = getDataSource(point);
- if (StringUtils.isNotNull(dataSource)) {
- DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name());
- }
- try {
- return point.proceed();
- } finally {
- // 销毁数据源 在执行方法之后
- DynamicDataSourceContextHolder.clearDataSourceType();
- }
- }
- /**
- * 获取需要切换的数据源
- */
- public DataSource getDataSource(ProceedingJoinPoint point) {
- MethodSignature signature = (MethodSignature) point.getSignature();
- DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class);
- if (Objects.nonNull(dataSource)) {
- return dataSource;
- }
- return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class);
- }
- }
|