package com.landtool.lanbase.common.datasource.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.landtool.lanbase.common.datasource.DataSourceNames;
|
import com.landtool.lanbase.common.datasource.DynamicDataSource;
|
import com.landtool.lanbase.common.datasource.annotation.DataSource;
|
|
/**
|
* @author lanbase
|
* @Description: TODO(多数据源切面处理类-注解切换数据源)
|
* @date 2017-9-26 16:55
|
*/
|
@Aspect
|
@Component
|
public class DataSourceAspect implements Ordered {
|
|
protected Logger logger = LoggerFactory.getLogger(getClass());
|
|
@Pointcut("@annotation(com.landtool.lanbase.common.datasource.annotation.DataSource)")
|
public void dataSourcePointCut() {
|
|
}
|
|
@Around("dataSourcePointCut()")
|
public Object around(ProceedingJoinPoint point) throws Throwable {
|
MethodSignature signature = (MethodSignature) point.getSignature();
|
Method method = signature.getMethod();
|
|
//转换数据源
|
DataSource ds = method.getAnnotation(DataSource.class);
|
if(ds == null){
|
DynamicDataSource.setDataSource(DataSourceNames.FIRST);
|
logger.debug("set datasource is " + DataSourceNames.FIRST);
|
}else {
|
DynamicDataSource.setDataSource(ds.name());
|
logger.debug("set datasource is " + ds.name());
|
}
|
|
try {
|
return point.proceed();
|
} finally {
|
DynamicDataSource.clearDataSource();
|
logger.debug("clean datasource");
|
}
|
}
|
|
@Override
|
public int getOrder() {
|
return 1;
|
}
|
|
}
|