| New file | 
|  |  |  | 
|---|
|  |  |  | package com.dy.common.multiDataSource; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.dy.common.contant.Constant; | 
|---|
|  |  |  | import com.dy.common.springUtil.SpringContextUtil; | 
|---|
|  |  |  | import com.mysql.cj.util.StringUtils; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | 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.springframework.core.annotation.Order; | 
|---|
|  |  |  | import org.springframework.stereotype.Component; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.lang.reflect.Method; | 
|---|
|  |  |  | import java.util.Objects; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Slf4j | 
|---|
|  |  |  | @Aspect | 
|---|
|  |  |  | @Order(Constant.AspectOrderDataSource) | 
|---|
|  |  |  | @Component | 
|---|
|  |  |  | public class DataSourceSingleAspect { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Pointcut("@annotation(com.dy.common.multiDataSource.DataSourceSingle)") | 
|---|
|  |  |  | public void dataSourceSinglePointCut() { | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Around("dataSourceSinglePointCut()") | 
|---|
|  |  |  | public Object around(ProceedingJoinPoint point) throws Throwable { | 
|---|
|  |  |  | MethodSignature signature = (MethodSignature) point.getSignature(); | 
|---|
|  |  |  | Method method = signature.getMethod(); | 
|---|
|  |  |  | DataSourceSingle dataSource = method.getAnnotation(DataSourceSingle.class); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Objects.nonNull(dataSource) && !StringUtils.isNullOrEmpty(dataSource.value())) { | 
|---|
|  |  |  | //log.info("数据源指定为" + dataSource.value()); | 
|---|
|  |  |  | //强制转成方法上配置的数据源,替换掉DataSourceContext中保存的数据源 | 
|---|
|  |  |  | DataSourceContext.set(dataSource.value()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | String datasourceName = SpringContextUtil.getApplicationContext().getEnvironment().getProperty("spring.datasource.names") ; | 
|---|
|  |  |  | if(!StringUtils.isNullOrEmpty(datasourceName)){ | 
|---|
|  |  |  | //log.info("根据配置数据源为" + datasourceName); | 
|---|
|  |  |  | DataSourceContext.set(datasourceName); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | log.error("数据源未指定"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | //log.info("数据库操作开始" + dataSource.value()); | 
|---|
|  |  |  | return point.proceed(); | 
|---|
|  |  |  | } finally { | 
|---|
|  |  |  | // 销毁数据源 在执行方法之后 | 
|---|
|  |  |  | //log.info("数据源操作完毕" + dataSource.value()); | 
|---|
|  |  |  | DataSourceContext.remove(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|