使用hibernate配置多个数据源的话很简单,就和配置第一个数据源一样。值得注意的是调用不同的数据源,sessionFactory的注入得不同;
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}">
</property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="maxActive" value="${jdbc.maxActive}"></property>
</bean>
<!-- Spring自动创建hibernate的SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource">
</property>
<!-- 映射所有实体 -->
<property name="packagesToScan">
<list>
<value>com.yojosources.admin.po</value>
<value>com.yojosources.business.po</value>
<value>com.yojosources.member.po</value>
<value>com.yojosources.privilege.po</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="javax.persistence.validation.mode">none</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<!-- 输出所有SQL语句到控制台 -->
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<!-- 在log和console中打印出更漂亮的SQL -->
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<!-- 允许被缓存的JDBC 连接开启自动提交 -->
<prop key="hibernate.connection.autocommit">${hibernate.connection.autocommit}</prop>
<!-- 强制Hibernate按照被更新数据的主键,为SQL更新排序。 -->
<prop key="hibernate.order_updates">${hibernate.order_updates}</prop>
<!-- 允许Hibernate使用JDBC2的可滚动结果集。 -->
<prop key="hibernate.jdbc.use_scrollable_resultset">${hibernate.jdbc.use_scrollable_resultset}</prop>
<!-- hibernate将在SQL中生成有助于调式的注解信息 -->
<prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>
<!-- 指定Hibernate在何时释放 JDBC 连接 -->
<prop key="hibernate.connection.release_mode">${hibernate.connection.release_mode}</prop>
<!-- 同一个事务用一个session -->
<!-- <prop key="hibernate.current_session_context_class">${hibernate.current_session_context_class}</prop>-->
</props>
</property>
</bean>
<bean id="lotDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc2.driverClassName}">
</property>
<property name="url" value="${jdbc2.url}"></property>
<property name="username" value="${jdbc2.username}"></property>
<property name="password" value="${jdbc2.password}"></property>
<property name="maxActive" value="${jdbc2.maxActive}"></property>
</bean>
<!-- Spring自动创建hibernate的SessionFactory -->
<bean id="lotSessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="lotDataSource">
</property>
<property name="hibernateProperties">
<props>
<prop key="javax.persistence.validation.mode">none</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<!-- 输出所有SQL语句到控制台 -->
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<!-- 在log和console中打印出更漂亮的SQL -->
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<!-- 允许被缓存的JDBC 连接开启自动提交 -->
<prop key="hibernate.connection.autocommit">${hibernate.connection.autocommit}</prop>
<!-- 强制Hibernate按照被更新数据的主键,为SQL更新排序。 -->
<prop key="hibernate.order_updates">${hibernate.order_updates}</prop>
<!-- 允许Hibernate使用JDBC2的可滚动结果集。 -->
<prop key="hibernate.jdbc.use_scrollable_resultset">${hibernate.jdbc.use_scrollable_resultset}</prop>
<!-- hibernate将在SQL中生成有助于调式的注解信息 -->
<prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>
<!-- 指定Hibernate在何时释放 JDBC 连接 -->
<prop key="hibernate.connection.release_mode">${hibernate.connection.release_mode}</prop>
<!-- 同一个事务用一个session -->
<!-- <prop key="hibernate.current_session_context_class">${hibernate.current_session_context_class}</prop>-->
</props>
</property>
</bean>
dao的注入
@Resource(name="lotSessionFactory")
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Resource
protected SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
现在说说调用多个数据源报表模块吧,
记录总数 符合条件的所有数据源的和
查询当页记录的话: 根据页面大小和页面索引,确定要查找哪些数据源,每个数据源要查找多少条数据
再依次调用。