| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /**
- * Copyright (c) 2018 yiidata.com All rights reserved.
- *
- * http://yiidata.com
- *
- *
- */
- package com.yiidata.intergration.web.datasource.aspect;
- import com.yiidata.intergration.web.datasource.annotation.DataSource;
- import com.yiidata.intergration.web.datasource.config.DynamicContextHolder;
- 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.core.annotation.Order;
- import org.springframework.stereotype.Component;
- import java.lang.reflect.Method;
- /**
- * 多数据源,切面处理类
- *
- * @author zhenqin
- */
- @Aspect
- @Component
- @Order(Ordered.HIGHEST_PRECEDENCE)
- public class DataSourceAspect {
- protected Logger logger = LoggerFactory.getLogger(getClass());
- @Pointcut("@annotation(com.yiidata.intergration.web.datasource.annotation.DataSource) " +
- "|| @within(com.yiidata.intergration.web.datasource.annotation.DataSource)")
- public void dataSourcePointCut() {
- }
- @Around("dataSourcePointCut()")
- public Object around(ProceedingJoinPoint point) throws Throwable {
- MethodSignature signature = (MethodSignature) point.getSignature();
- Class targetClass = point.getTarget().getClass();
- Method method = signature.getMethod();
- DataSource targetDataSource = (DataSource)targetClass.getAnnotation(DataSource.class);
- DataSource methodDataSource = method.getAnnotation(DataSource.class);
- if(targetDataSource != null || methodDataSource != null){
- String value;
- if(methodDataSource != null){
- value = methodDataSource.value();
- }else {
- value = targetDataSource.value();
- }
- DynamicContextHolder.push(value);
- logger.debug("set datasource is {}", value);
- }
- try {
- return point.proceed();
- } finally {
- DynamicContextHolder.poll();
- }
- }
- }
|