一个WEB应用如何配置两个数据源,并根据不同查询使用不同数据源?(具体情况请见帖子内容)
一个WEB应用怎么配置两个数据源,并根据不同查询使用不同数据源?(具体情况请见帖子内容)
各位大侠好!
目前系统情况:
我们的系统是SSH架构的,工程是用websphere发布的,数据源也是在websphere上配置的,就是JNDI数据源吧。
需求:
现在我想再配置一个数据源,也就是有两个数据源,在使用系统功能点击某几个报表时,可以用新的数据源进行查询数据,而其他报表还是用旧的数据源,并且也不会影响到其他功能的插入更新数据库。
进展情况:我了解到的方法首先是在websphere上配置新数据源,具体怎么配这个不操心,有人配。其次是更改项目中的WEB.XML文件,再加一个配置,如下:
然后是就是要改报表查询的代码,这个我就不知道怎么做了,所有报表的查询方法都是写在一个DAO里,不知道怎么根据不同的方法去连接不同的数据源,举个例子:
这是其中一个报表的查询方法,不知道应该怎么改,或者不改查询方法,有没有其他的根据查询方法判断使用数据源的办法。
另外除了以上几步,需要实现我的需求还需要做哪些工作,先谢过各位大侠!
------解决方案--------------------
将一个DAO分为两个DAO,代码一样的
sessionFactory注入的时候数据源不一样
然后service层注入不同的DAO
------解决方案--------------------
如果表结构一样的话,可以用一个DAO就可以了,表结构不一样的话,最好要用二个DAO
配置SPRING的DAO注入
<bean id="dao_a" class="com.xxx.DAO1Impl">
<property name="dataSource" ref="dataSource_A"></property>
</bean>
<bean id="dao_a" class="com.xxx.DAO2Impl">
<property name="dataSource" ref="dataSource_B"></property>
</bean>
------解决方案--------------------
数据源等一层层都是IOC容器自动注入的,所以不能通过代码来决定使用哪个数据源,所以之有通过service层引用不同的DAO,然后不同的DAO引用不同的sessionFactory,不同的sessionFactory引用不同的数据源
------解决方案--------------------
其实只需要写一个动态设置connect的工具就可以了,根据前台传过来的判断新旧的区别,分别去获取不同的connect连接设置到DAO对象就可以了没必要分成2个DAO增加代码量
------解决方案--------------------
我们也是分了两个数据源,用两个DAO引用不同的数据源,使用时区别对待就可以的
------解决方案--------------------
或者dao实现俩数据源的接口,修改量会小些
------解决方案--------------------
两个数据源对象同时注入到DAO中不行吗,在DAO中想用哪个就用哪个
各位大侠好!
目前系统情况:
我们的系统是SSH架构的,工程是用websphere发布的,数据源也是在websphere上配置的,就是JNDI数据源吧。
需求:
现在我想再配置一个数据源,也就是有两个数据源,在使用系统功能点击某几个报表时,可以用新的数据源进行查询数据,而其他报表还是用旧的数据源,并且也不会影响到其他功能的插入更新数据库。
进展情况:我了解到的方法首先是在websphere上配置新数据源,具体怎么配这个不操心,有人配。其次是更改项目中的WEB.XML文件,再加一个配置,如下:
- Java code
<resource-ref> <description>Oracle Datasource</description> <res-ref-name>jdbc/旧数据源名</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> <resource-ref> <description>Oracle Datasource</description> <res-ref-name>jdbc/新数据源名</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
然后是就是要改报表查询的代码,这个我就不知道怎么做了,所有报表的查询方法都是写在一个DAO里,不知道怎么根据不同的方法去连接不同的数据源,举个例子:
- Java code
public List<Object> getXXXReport(DTOReports rc) { StringBuffer sqlString = new StringBuffer(); /** SQL拼装语句,忽略 **/ //查询 List<Object> result = (List<Object>) this.getJpaTemplate().execute( new JpaCallback() { public Object doInJpa(EntityManager entitymanager) throws PersistenceException { Query query = entitymanager.createNativeQuery(sqlString .toString()); List<Object> list = query.getResultList(); return list; } }); return result; }
这是其中一个报表的查询方法,不知道应该怎么改,或者不改查询方法,有没有其他的根据查询方法判断使用数据源的办法。
另外除了以上几步,需要实现我的需求还需要做哪些工作,先谢过各位大侠!
------解决方案--------------------
将一个DAO分为两个DAO,代码一样的
sessionFactory注入的时候数据源不一样
然后service层注入不同的DAO
------解决方案--------------------
如果表结构一样的话,可以用一个DAO就可以了,表结构不一样的话,最好要用二个DAO
配置SPRING的DAO注入
<bean id="dao_a" class="com.xxx.DAO1Impl">
<property name="dataSource" ref="dataSource_A"></property>
</bean>
<bean id="dao_a" class="com.xxx.DAO2Impl">
<property name="dataSource" ref="dataSource_B"></property>
</bean>
------解决方案--------------------
数据源等一层层都是IOC容器自动注入的,所以不能通过代码来决定使用哪个数据源,所以之有通过service层引用不同的DAO,然后不同的DAO引用不同的sessionFactory,不同的sessionFactory引用不同的数据源
------解决方案--------------------
其实只需要写一个动态设置connect的工具就可以了,根据前台传过来的判断新旧的区别,分别去获取不同的connect连接设置到DAO对象就可以了没必要分成2个DAO增加代码量
------解决方案--------------------
我们也是分了两个数据源,用两个DAO引用不同的数据源,使用时区别对待就可以的
------解决方案--------------------
或者dao实现俩数据源的接口,修改量会小些
------解决方案--------------------
两个数据源对象同时注入到DAO中不行吗,在DAO中想用哪个就用哪个