DataSourceAspectAdvice.java 1.28 KB
package com.cjs.site.util.db;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
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.springframework.stereotype.Component;

/**
 * 数据源通知
 * 
 * @author tongyufu
 *
 */
@Component
@Aspect
public class DataSourceAspectAdvice {

    Logger log = LogManager.getLogger();

    @Pointcut("execution(* com.cjs.site.dao..*.*(..))")
    public void point() {

    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Around("point()")
    public Object around(ProceedingJoinPoint joinpoint) throws Throwable {
        Class[] interfaces = joinpoint.getTarget().getClass().getInterfaces();
        //默认使用MySql数据源
        RoutingDataSource.setDataSourceKey(RoutingDataSource.MYSQL);
        for (Class clz : interfaces) {
            if (clz.isInterface()) {
                for (Class clz2 : clz.getInterfaces()) {
                    if (clz2.isAssignableFrom(OracleDao.class)) {
                        RoutingDataSource.setDataSourceKey(RoutingDataSource.ORACLE);
                    }
                }
            }
        }
        return joinpoint.proceed();
    }

}