package com.farriver.bwf.service.config.database; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Aspect @Component public class DataSourceAop { private final Logger logger = LoggerFactory.getLogger(DataSourceAop.class); @Pointcut("!@annotation(com.farriver.bwf.service.config.database.Master) " + "&& execution(public * com.farriver.bwf.service.*..*.select*(..)) " + "|| execution(public * com.farriver.bwf.service.*..*.Select*(..))" + "|| execution(public * com.farriver.bwf.service.*..*.get*(..))" + "|| execution(public * com.farriver.bwf.service.*..*.Get*(..))") public void readPointcut() { } @Pointcut("@annotation(com.farriver.bwf.service.config.database.Master) " + "|| execution(* com.farriver.bwf.service..*.insert*(..)) " + "|| execution(* com.farriver.bwf.service..*.add*(..)) " + "|| execution(* com.farriver.bwf.service..*.update*(..)) " + "|| execution(* com.farriver.bwf.service..*.edit*(..)) " + "|| execution(* com.farriver.bwf.service..*.delete*(..)) " + "|| execution(* com.farriver.bwf.service..*.remove*(..))" + "|| execution(* com.farriver.bwf.service..*.Create*(..)) " + "|| execution(* com.farriver.bwf.service..*.Update*(..)) " + "|| execution(* com.farriver.bwf.service..*.Delete*(..)) " + "|| execution(* com.farriver.bwf.service..*.BatchDelete*(..)) ") public void writePointcut() { } @Before("readPointcut()") public void read() { DBContextHolder.slave(); } @Before("writePointcut()") public void write() { DBContextHolder.master(); } }