在这里,我们接上一篇文章,利用JNDI访问应用服务器配置的两个数据源来模拟同时操作不同的数据库如同时操作mysql和oracle等。实际上,上个例子可能用来模拟mysql数据库主从配置读写分离更贴切些。既然如此,在本例中,我们就完成读写分离的模拟在web端的配置实例。
续上次的例子,关于JNDI数据源的配置和spring datasource的配置这里不再重复。下面着重加入AOP实现DAO层动态分库调用。可先看上篇文章《spring学习笔记(18)使用JNDI模拟访问应用服务器多数据源实例 》
1. DAO层设计
/***************接口设计************/
public interface MyBaseDao {
SessionFactory getSessionFactory();
<E> E add(Object object);
<E>E queryUnique(Class<E> clazz, Integer entityId);
void setSourceType(Integer sourceType);
}
/****************实现类设计******************/
@Repository
public class MyBaseDaoImpl implements MyBaseDao{
//由于本类是单例了,考虑到线程安全问题,这是使用ThreadLocal作为判断调用哪个数据源的依据
private ThreadLocal<Integer> sourceType = new ThreadLocal<Integer>();