对于一个应用连接多个数据库的问题,如果是因为数据量大而分库形成的多个数据库,可以在数据库的层面使用分布式中间件,比如:cobar或amoba都可以。
如果是分表形成的多库,则建议使用原生的jdbc或Spring配置多个数据源,根据业务逻辑,通过代码动态查询。
eg:
使用Spring配置多个数据源
<!--定义多个数据库连接源,每个数据源的数据库名称、用户名、密码都一致,仅仅是IP地址的不同,即:url是动态配置的--><!--定义数据源 dataSource1,使用DBCP连接池 --><bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url1}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="timeBetweenEvictionRunsMillis"> <value>3600000</value><!--1 hours --> </property> <property name="minEvictableIdleTimeMillis"> <value>28800000</value><!--8 hours --> </property></bean> <!--定义数据源 dataSource2,使用DBCP连接池 --> <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url2}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="timeBetweenEvictionRunsMillis"> <value>3600000</value><!--1 hours --> </property> <property name="minEvictableIdleTimeMillis"> <value>28800000</value><!--8 hours --> </property> </bean> <!--为每个数据源配置一个SessionFactory,与上面定义的数据源dataSource一致--> <!-- Hibernate4中使用以下配置方式 --> <bean id="sessionFactory1" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource1" /> <!-- 采用注解形式配置对象关系映射信息 --> <property name="packagesToScan"> <list> <value>com.jay.*</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop> </props> </property> </bean>
|