eclipse 使用maven 构建springboot+mybatis+多数据源+aop

来源:互联网 发布:中国航空制造业知乎 编辑:程序博客网 时间:2024/05/24 06:49

本文转载至:http://www.cnblogs.com/java-zhao/p/5415896.html

1、项目截图


1、UserDao.java

package com.zzg.myboot.dao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import com.zzg.myboot.datasource.DatabaseContextHolder;import com.zzg.myboot.datasource.DatabaseType;import com.zzg.myboot.domain.User;import com.zzg.myboot.mapper.UserMapper;@Repositorypublic class UserDao { @Autowired private UserMapper mapper;  public int deleteByPrimaryKey(Long id){ //DatabaseContextHolder.setDatabaseType(DatabaseType.write); return mapper.deleteByPrimaryKey(id); } publicint insert(User record){ //DatabaseContextHolder.setDatabaseType(DatabaseType.write); return mapper.insert(record); } publicint insertSelective(User record){ //DatabaseContextHolder.setDatabaseType(DatabaseType.write); return mapper.insertSelective(record); } publicUser selectByPrimaryKey(Long id){ //DatabaseContextHolder.setDatabaseType(DatabaseType.read); return mapper.selectByPrimaryKey(id); } public int updateByPrimaryKeySelective(User record){ //DatabaseContextHolder.setDatabaseType(DatabaseType.write); return mapper.updateByPrimaryKeySelective(record); } publicint updateByPrimaryKey(User record){ //DatabaseContextHolder.setDatabaseType(DatabaseType.write); return mapper.updateByPrimaryKey(record); } }

说明:需要注销设置数据源key的那一句代码

2、DataSourceAspect

package com.zzg.myboot.datasource;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.stereotype.Component;import org.springframework.util.StringUtils;@Aspect@Componentpublic class DataSourceAspect {    @Before("execution(* com.zzg.myboot.dao.*.*(..))")    public void setDataSourceKey(JoinPoint point){      // 获取到当前执行的方法名        String methodName = point.getSignature().getName();        System.out.println("方法名为:"+methodName);        if (isSlave(methodName)) {            // 标记为读库            System.out.println("标记为读库");            DatabaseContextHolder.setDatabaseType(DatabaseType.read);        } else {            // 标记为写库            System.out.println("标记为写库");            DatabaseContextHolder.setDatabaseType(DatabaseType.write);        }               }        /**     * 判断是否为读库     *     * @param methodName     * @return     */    private Boolean isSlave(String methodName) {        // 方法名以query、find、get开头的方法名走从库        return StringUtils.startsWithIgnoreCase(methodName, "select");    }}


效果截图:


0 0