Welcome

首页 / 软件开发 / JAVA / 在SpringSide 2.0中使用多个数据库

在SpringSide 2.0中使用多个数据库2010-12-05为了提高网站将来向外扩展的能力,我是用了数据分割的架构,这就要求我的网站能够灵活的访问多个数据库,如果是直接操作JDBC,这根本就不成问题。但是在SpringSide2.0中,由于集成了Hibernate,所以对数据的访问大部分时候都是通过配置实现的。

要想在SpringSide2.0中使用多个数据库,最简单的办法就是配置多个sessionFactory,下面是我的探索步骤。

首先,要修改src/resources/config目录下的jdbc.properties文件,定义多个数据库的连接,如下:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.urlYumDaysIndex=jdbc:mysql://localhost:3306/YumDaysIndex?useUnicode=true&characterEncoding=utf8
jdbc.urlYumDays001=jdbc:mysql://localhost:3306/YumDays001?useUnicode=true&characterEncoding=utf8

然后,修改src/resources/spring目录下的dataAccessContext-hibernate.xml文件,定义多个数据源,它们之间只有url属性不同:

<!-- 数据源定义,使用Apache DBCP 连接池 -->
<bean id="dataSourceYumDaysIndex" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.urlYumDaysIndex}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 数据源定义,使用Apache DBCP 连接池 -->
<bean id="dataSourceYumDays001" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.urlYumDays001}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

然后,还是修改这个文件,定义多个sessionFactory,它们之间只有数据源的属性不同:

<!--Hibernate SessionFatory-->
<bean id="sessionFactoryIndex" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSourceYumDaysIndex"/>
<property name="annotatedClasses">
<list>
<value>com.yumdays.model.Catalog</value>
<value>com.yumdays.model.Statistic</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!-- see /components/orm/hibernate/meta/dialect.properties for all Dialect -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
</bean>
<!--Hibernate SessionFatory-->
<bean id="sessionFactory001" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSourceYumDays001"/>
<property name="annotatedClasses">
<list>
</list>
</property>
<property name="hibernateProperties">
<props>
<!-- see /components/orm/hibernate/meta/dialect.properties for all Dialect -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
</bean>