1.首先在配置文件中添加如下:
<aop:aspectj-autoproxy/> <!--表示开启注解切面编程,即可通过@Aspectj配置切点-->
<aop:aspectj-autoproxy proxy-target-class="true"/> <!-- proxy-target-class="true"表示采用CGLib动态代理技术,原生是JDK动态代理 -->
<context:component-scan base-package="com.aspect"/> <!-- 配置自动扫描的包 -->
2.配置切点,使得在调用查询方法的时候走从库。
package com.aspect;
import com.util.DynamicDataSourceHolder;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class ServiceAspect {
private final Logger logger = LoggerFactory.getLogger(ServiceAspect.class);
@Before("execution(public * com.service..get*(..))")
public void getBeforeExtract(JoinPoint joinPoint) {
logger.info("-------------datasource:slave");
DynamicDataSourceHolder.setDataSourceSlave();
}
@Before("execution(public * com.service..query*(..))")
public void queryBeforeExtract(JoinPoint joinPoint) {
logger.info("-------------datasource:slave");
DynamicDataSourceHolder.setDataSourceSlave();
}
@After("execution(public * com.service..*(..))")
public void queryAfterExtract(JoinPoint joinPoint) {
DynamicDataSourceHolder.clearDataSource();
logger.info("-------------datasource:clear");
}
}