论坛首页 Java企业应用论坛

如何在spring框架中解决多数据源的问题

浏览 109939 次
精华帖 (8) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-15  
programmer 写道
请问,使用多数据源,怎么支持cache
我看到你在论坛中提问怎样实现单实例多用户的情况下使用cache。对于spring+hibernate来说,单实例多用户的情况运用多数据源的方式就可以解决了,而cache如何解决呢?一级缓存就不必说了,hibernate自己管理,在大多数情况下你不必管它。二级缓存呢?如果你采用的是我提出的方案,你就可以如同使用单数据源一样使用多数据源,因为在这个方案中,就如同将多个数据源整合成一个数据源一般。你只要将需要二级缓存的表做好配置就可以了。但你必须注意一个细节:如果你的多个数据源有相同的表,那么你必须保证在所有数据源中的该表主键是唯一的。什么意思呢?如果你的数据源A和B都有表X,那么在数据源A中的表X有ID为001,在数据源B中的表X中就不能有这个ID,因为这里已经将多个数据源整合成一个数据源使用了。
如果你希望了解更详细的信息,我会随后在博客中讨论这个问题。谢谢
0 请登录后投票
   发表时间:2007-06-20  
我也遇到过同样的问题,解决方案和楼主类似,但是使用该方案有一个大前提就是一个用户同一时刻只能使用一个数据源,比如我遇到的实际需求就是用户在登陆的时候要选择是用测试库还是产品库,他只要选一个就可以了;而后台驻守的线程则配置死只用产品库的。但是一旦遇到需要两个数据源同时访问的需求,那么此方案就无能为力了,同时事务管理的问题也就出现了。比如用户需要在更新一个数据源中记录的同时,也更新另外一个数据源的某个记录,两者要在一个事务中进行,要么都成功,要么都失败。如果这样,有什么好的解决方案吗
0 请登录后投票
   发表时间:2007-06-21  
sageheart 写道
我也遇到过同样的问题,解决方案和楼主类似,但是使用该方案有一个大前提就是一个用户同一时刻只能使用一个数据源,比如我遇到的实际需求就是用户在登陆的时候要选择是用测试库还是产品库,他只要选一个就可以了;而后台驻守的线程则配置死只用产品库的。但是一旦遇到需要两个数据源同时访问的需求,那么此方案就无能为力了,同时事务管理的问题也就出现了。比如用户需要在更新一个数据源中记录的同时,也更新另外一个数据源的某个记录,两者要在一个事务中进行,要么都成功,要么都失败。如果这样,有什么好的解决方案吗
这个问题我也考虑到了,也许我的另一篇文章《再析在spring框架中解决多数据源的问题》可以解决你的问题。
0 请登录后投票
   发表时间:2007-09-07  
请问搂主如何解决hibernate方言的问题,我使用db2和sqlserver连个数据库,配置两个数据源可以解决一些问题,而且搂主的解决方案还是很不错的!但是hibernate方言问题怎么办?????
0 请登录后投票
   发表时间:2007-09-15  
我觉得这样解决,有些问题还是解决不了,例如数据源是在使用过程中,不断增加(数据库极有可能达到上W个.不过每个数据库的结构都是一样),我想上面解决办法还是不行的.如果对多数据源感兴趣,可以加我QQQ:3801339
0 请登录后投票
   发表时间:2007-09-18  
ssuupv 写道
我觉得这样解决,有些问题还是解决不了,例如数据源是在使用过程中,不断增加(数据库极有可能达到上W个.不过每个数据库的结构都是一样),我想上面解决办法还是不行的.如果对多数据源感兴趣,可以加我QQQ:3801339
我们以前处理这个问题的方案是专门建一个数据库,用于存储w个数据库连接信息,和用户信息,并且用户信息和数据库连接信息是关联的。
用户登录后,程序就可以动态的取出该用户资源对应的数据库连接信息,进行连接。
0 请登录后投票
   发表时间:2007-09-18  
ssuupv 写道
我觉得这样解决,有些问题还是解决不了,例如数据源是在使用过程中,不断增加(数据库极有可能达到上W个.不过每个数据库的结构都是一样),我想上面解决办法还是不行的.如果对多数据源感兴趣,可以加我QQQ:3801339


很抱歉今天才看见这条回复,实际上hamlet的方案也不错,但使用配置文件来解决这个问题似乎效率更高些,毕竟可以避免应用服务器因为获取数据库连接信息而访问数据库服务器的操作。

如何使用配置文件解决这个问题呢?在每增加一个数据库的时候,将该数据库的连接信息放到一个新创建的ApplicationContext-datasource-XXX.xml文件中。也就是说动态创建一个spring的配置文件,该文件中就只有一个datasource的bean,然后动态添加到spring中就可以了。如何动态添加,在该文最后的部分提到了,但遗憾的是我提供的这个功能的代码有一点儿问题。如果你需要,我可以帮助你解决这个问题。MSN:fan_gang2004@hotmail.com,我不用QQ。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics