本文转载至: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;
@Repository
public class UserDao {
@Autowired
private UserMapper mapper;
public int deleteByPrimaryKey(Long id){
//DatabaseContextHolder.setDatabaseType(DatabaseType.write);
return mapper.deleteByPrimaryKey(id);
}
public int insert(User record){
//DatabaseContextHolder.setDatabaseType(DatabaseType.write);
return mapper.insert(record);
}
public int insertSelective(User record){
//DatabaseContextHolder.setDatabaseType(DatabaseType.write);
return mapper.insertSelective(record);
}
public User selectByPrimaryKey(Long id){
//DatabaseContextHolder.setDatabaseType(DatabaseType.read);
return mapper.selectByPrimaryKey(id);
}
public int updateByPrimaryKeySelective(User record){
//DatabaseContextHolder.setDatabaseType(DatabaseType.write);
return mapper.updateByPrimaryKeySelective(record);
}
public int 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
@Component
public 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");
}
}
效果截图: