论坛首页 Java企业应用论坛

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

浏览 109938 次
精华帖 (8) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-24  
  我们现在也正好遇到了多数据源的项目,看了这篇文章,真可谓一场及时雨呀,我想高人fanggang在看到自己的劳动帮助了别人,内心应是无比欣慰和愉快的,在此仅向fanggang致以谢意!并祝工作顺利,全家快乐!
  用您的方法后,我现在已经能实现了多数据库查询,而且也保证了事务,一切都很正常,但是有一点现在让我很着急,而且让我束手无策.因为我们在对数据库的操作时也用到了JdbcTemplate,目前在您的文章介绍中去只用了HibernateTemplate对数据库进行操作,我昨天试着把MultidataSource注入到jdbcTemplate里面,并把jdbcTemplate注入到我使用的dao里面,此时我在使用他的时候就出现了问题,它抛出这个异常:java.lang.NoSuchFieldError: EMPTY_ITERATOR,我到api上查了一下,他解释的大意思是我在试图改变一个对象时引发了此异常.请fanggang同志给以点化,当思感恩不尽!我的Msn是:xirilianren2844@hotmail.com.
                                  
 
0 请登录后投票
   发表时间:2007-05-29  
xirilianren2844 写道
  我们现在也正好遇到了多数据源的项目,看了这篇文章,真可谓一场及时雨呀,我想高人fanggang在看到自己的劳动帮助了别人,内心应是无比欣慰和愉快的,在此仅向fanggang致以谢意!并祝工作顺利,全家快乐!
  用您的方法后,我现在已经能实现了多数据库查询,而且也保证了事务,一切都很正常,但是有一点现在让我很着急,而且让我束手无策.因为我们在对数据库的操作时也用到了JdbcTemplate,目前在您的文章介绍中去只用了HibernateTemplate对数据库进行操作,我昨天试着把MultidataSource注入到jdbcTemplate里面,并把jdbcTemplate注入到我使用的dao里面,此时我在使用他的时候就出现了问题,它抛出这个异常:java.lang.NoSuchFieldError: EMPTY_ITERATOR,我到api上查了一下,他解释的大意思是我在试图改变一个对象时引发了此异常.请fanggang同志给以点化,当思感恩不尽!我的Msn是:xirilianren2844@hotmail.com.

非常抱歉一直在出差中,今天才看到你的信息,是的,我的方案能带给你帮助我感到非常高兴。关于你的问题,我初步判断是你在进行数据源切换的时候,目的数据库的表中没有你所操作的字段,不知是不是这个原因,你查一查。我的MSN是:fan_gang2004@hotmail.com,不过我在出差中,近期可能不会在线上。
0 请登录后投票
   发表时间:2007-05-29  
fangang 写道
xirilianren2844 写道
  我们现在也正好遇到了多数据源的项目,看了这篇文章,真可谓一场及时雨呀,我想高人fanggang在看到自己的劳动帮助了别人,内心应是无比欣慰和愉快的,在此仅向fanggang致以谢意!并祝工作顺利,全家快乐!
  用您的方法后,我现在已经能实现了多数据库查询,而且也保证了事务,一切都很正常,但是有一点现在让我很着急,而且让我束手无策.因为我们在对数据库的操作时也用到了JdbcTemplate,目前在您的文章介绍中去只用了HibernateTemplate对数据库进行操作,我昨天试着把MultidataSource注入到jdbcTemplate里面,并把jdbcTemplate注入到我使用的dao里面,此时我在使用他的时候就出现了问题,它抛出这个异常:java.lang.NoSuchFieldError: EMPTY_ITERATOR,我到api上查了一下,他解释的大意思是我在试图改变一个对象时引发了此异常.请fanggang同志给以点化,当思感恩不尽!我的Msn是:xirilianren2844@hotmail.com.

非常抱歉一直在出差中,今天才看到你的信息,是的,我的方案能带给你帮助我感到非常高兴。关于你的问题,我初步判断是你在进行数据源切换的时候,目的数据库的表中没有你所操作的字段,不知是不是这个原因,你查一查。我的MSN是:fan_gang2004@hotmail.com,不过我在出差中,近期可能不会在线上。
有那个字段,我是在还没有切换数据库的时候,就进行了相应的数据库查询,然后就报那个异常了.是不是jdbcTemplate不能用动态数据源的方式去得到数据库的连接?
0 请登录后投票
   发表时间:2007-05-29  
我虽然没有亲自测试,但我认为jdbcTemplate是可以的,因为jdbcTemplate接受的是dataSource。只要jdbcTemplate接受dataSource就可以使用MultiDataSource,因为这就是MultiDataSource的优势,你可以再试试。
0 请登录后投票
   发表时间:2007-06-08  
我想知道,lz的这种方案能够保证open session in view的正常使用么?因为osiv模式是在
openSessionInViewFilter时就经确定了使用的数据源,而且以后的数据库操作都会保证使用同一数据连接,所以LZ的这种方法似乎对osiv模式没多大意义
0 请登录后投票
   发表时间:2007-06-08  
看不到图
0 请登录后投票
   发表时间:2007-06-12  
二十一 写道
我想知道,lz的这种方案能够保证open session in view的正常使用么?因为osiv模式是在
openSessionInViewFilter时就经确定了使用的数据源,而且以后的数据库操作都会保证使用同一数据连接,所以LZ的这种方法似乎对osiv模式没多大意义

谢谢“二十一”朋友的提醒,但我研究了一下openSessionInViewFilter,它使用我的方案是没有问题的。打开源码可以发现,openSessionInViewFilter通过request获得sessionFactory,在我们的配置中,sessionFactory.dataSource对应的是MultiDataSource,而MultiDataSource通过request得到真正的数据源。既然openSessionInViewFilter和MultiDataSource是在同一个request中获取信息,那么我的方案是不会有什么问题的。
这里着实有些不太好理解,过去我的的dataSource对应的都是一个确定的数据源,而MultiDataSource却不是一个确定的数据源,但当作一个dataSource使用,这就是我提到的对客户透明。
MultiDataSource对应的是多数据源,但对于客户程序来说就仿佛是单数据源来使用。
0 请登录后投票
   发表时间:2007-06-13  
我想楼主对于什么是“动态”理解欠缺,呵呵。这还不是依据用户的需求进行数据源切换啊,这算是什么“动态”啊,按照你这么说,用户每一次提交一个表单也是动态啦,呵呵。

还有就是,如果在一个request周期都要确定一次数据源的话,这样频繁的更换数据源,呵呵。。。
再者,用户很可能同时打开多个数据源,这时,该怎么办啊?
0 请登录后投票
   发表时间:2007-06-13  
ljl 写道
我想楼主对于什么是“动态”理解欠缺,呵呵。这还不是依据用户的需求进行数据源切换啊,这算是什么“动态”啊,按照你这么说,用户每一次提交一个表单也是动态啦,呵呵。

还有就是,如果在一个request周期都要确定一次数据源的话,这样频繁的更换数据源,呵呵。。。
再者,用户很可能同时打开多个数据源,这时,该怎么办啊?

我所说的“动态”是指用户在提交数据的时候到底连接的是哪个数据源并没有写死,而是根据用户的需求,在运行期才确定连接什么数据,因此我称之为“动态”应当没有什么问题。至于为什么要这样切换,如果ljl朋友在自己的项目中有出现了这样的需求,你就可以理解为什么要这样做了。
你还问到用户很可能同时打开多个数据源的问题,如果是在不同的线程中打开的,用我的方案没有问题。如果是在同一个线程中打开,你需要稍微修改一下我的方案,关键是如何告诉MultiDataSource什么时候连接哪个数据源,就可以解决了。
0 请登录后投票
   发表时间:2007-06-15  
请问,使用多数据源,怎么支持cache
0 请登录后投票
论坛首页 Java企业应用版

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