现在又个需求请大家帮忙,有一个总的数据库里面存放用户表和权限表,
另外有4个子公司的有4套完全相同的数据库。
框架是S2SH的,现在的需求是根据不同的用户去操作不同的数据库中的表,
hibernate的连接由Spring的配置文件管理。
现在的想法是4套相同的数据库用动态的方式来连接
在spring 的配置文件中配置多个sessionFactory
比如 用户表中有个子公司编号,通过子公司的编号去找对应的sessionFactory,
然后把sessionFactory传给底层的Dao。
求教各位高手咯!
另外有4个子公司的有4套完全相同的数据库。
框架是S2SH的,现在的需求是根据不同的用户去操作不同的数据库中的表,
hibernate的连接由Spring的配置文件管理。
现在的想法是4套相同的数据库用动态的方式来连接
在spring 的配置文件中配置多个sessionFactory
比如 用户表中有个子公司编号,通过子公司的编号去找对应的sessionFactory,
然后把sessionFactory传给底层的Dao。
求教各位高手咯!
呵呵,和你一起等待高手好的方法
如getSessionFactory("A")就获取到SessionFactoryA这个实例
说的非常好。就像web接口一样。传入哪家公司的标题。调用哪家的sessionFactory。可以写个switch
http://blog.csdn.net/alex197963/archive/2009/08/20/4466810.aspx
要做事務(多數據庫之間)。。呵呵 辦不到。 SPRING用不了 ,要用得用EJB 可是你們項目是S2SH 那無解。
1,先建立用户和数据库的对照表
2,spring配置文件中配置一个默认的datasource,主要是为了能让服务跑起来。
3,用户登录的时候,查1建立的表,找到数据库
4,根据3找到的数据库,修改datasource的配置,将当前用户sessionId与新datasource保存在一个hashMap中,
5,建立一个filter,监听所有后台请求,根据sessionId4中的hashMap找到datasource,注入到sessionFactory中。
6,还要一个sessionListener,当服务端session销毁时,从4中的hashMap中移除该sessionId对应的值。
當然可以配置多個數據源,樓主的需求還要在SPRING實現多數據庫之間的 事務管理功能,這個SPRING天生缺陷,解決不了的。也許要靠第3方的東西了。這個東西我在找,記得以前有人搞過。忘記了。
這個值應該是 操作這個數據庫方法的權限,
當用戶進入系統進行操作的時候判斷,這個
用戶是否有這個權限,如果有就把這個權限的值
傳到sessionFactory裏。用戶管理裏也可以分配或取消這個值,這個就是你要做的,並且
在sessionFactory裏你就不用是默認的了。如果到這步,那肯定又會饒到 事務的問題上來 怎麼解決?http://topic.csdn.net/u/20110427/18/096d3f27-8e0f-4e60-bfe9-6173c7d2c710.html這裏用 到了atomikos
每次变都只需要修改这个文件就行了,有以下方案不知道是否可行
1. 写4个配置文件(数据库的连接池信息)
2 根据业务信息的实际要求判断是那套系统(总表的用户信息),然后就查找连接那个数据库
3 其他的应该不需要动
一个方法里 要用到 DS_A ,DS_B 那如何保证在一个事务里呢 ?这个你想过没?这个没解决 其它都不要去谈了。实现了 还不如不实现 真上线了这问题要人命。
还有就是可以几个数据库单独创建工程,使用webservice接口调用的形式绕过跨数据库
试试看,我随便说说
public SessionFactory getSessionFactory();
}
public final class BeanFactory implements ApplicationContextAware
{
private static ApplicationContext ctx ;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String id, Class<T> clazz)
{ return (T) ctx.getBean(id, clazz);
}
public void setApplicationContext(ApplicationContext applicationcontext) throws BeansException
{
ctx = applicationcontext; }
用的时候
sessionFactoryMgr=BeanFactory.getBean("配置文件中不同数据源id",SessionFactoryMgr.class);
sessionFactory = sessionFactoryMgr.getSessionFactory();
BeanFactory需要最开始时配置一下<bean class="com..BeanFactory" />