2008-06-06

如何在spring配置多个Hibernate数据源链接

关键字: 一个项目中多数据源配置

现在的好多项目,一般一个web应用会同时链接多个数据源,不知道大家是如何配置的?不知道如下做法有没有什么不好的地方。

一、首先配置hibernate数据源:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
  <!--1、Oracle 数据源配置-->
  <bean id="oraclesessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation">
      <value>WEB-INF/classes/oracle-h.cfg.xml</value>
    </property>
  </bean>
  <bean id="oracletransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
      <ref local="sessionFactory" />
    </property>
  </bean>
<!--2、SQLServer 数据源配置-->
  <bean id="sqlServersessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation">
      <value>WEB-INF/classes/sqlserver-h.cfg.xml</value>
    </property>
  </bean>
  <bean id="sqlServerTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
      <ref local="sqlServersessionFactory" />
    </property>
  </bean>
<!--3、其他数据源配置-->
.................

 2、配置spring的事务拦截器(AOP):

<!--1、oracle数据源 事务管理拦截器-->
    <tx:advice id="oracleTxAdvice" transaction-manager="oracletransactionManager">
	<tx:attributes>
		<tx:method name="find*" read-only="true"/>
		<tx:method name="get*" read-only="true"/>		<tx:method name="notx*" propagation="NEVER"/>
		<tx:method name="*" rollback-for="自定义Exception"/>
	</tx:attributes>
    </tx:advice>
<!--2、sqlserver数据源 事务管理拦截器-->
    <tx:advice id="sqlserverTxAdvice" transaction-manager="sqlservertransactionManager">
	<tx:attributes>
		<tx:method name="find*" read-only="true"/>
		<tx:method name="get*" read-only="true"/>		<tx:method name="notx*" propagation="NEVER"/>
		<tx:method name="*" rollback-for="自定义Exception"/>
	</tx:attributes>
    </tx:advice>
<!--3、其他数据源 事务管理拦截器-->
.................
<!--配置多数据源的事务拦截器-->
    <bean id="serviceAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <value>*Service</value>
            </list>
        </property>
        <property name="interceptorNames">
            <list>
                <value>oracleTxAdvice</value>
                <value>sqlServerTxAdvice</value>
                <value>XXXXXTxAdvice</value>
            </list>
        </property>
    </bean>

 

   这样就可以配置多个数据源了。

评论
crabboy 2008-06-09
还有更好的方法?
javadev 2008-06-07
怎么没看到有人发表意见啊?
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

javadev
搜索本博客
最近加入圈子
存档
最新评论