Spring+Hibernate多数据源配置

来源:互联网 发布:淘宝网店实名认证照片 编辑:程序博客网 时间:2024/04/25 02:56

数据源1

<bean id="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><!-- 连接信息 --><property name="driverClass"value="${driverClass}"></property><property name="jdbcUrl"value="${jdbcUrl}"></property><property name="user" value="${user}"></property><property name="password" value="${password}"></property></bean>

数据源2

<bean id="dataSourceB"class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><!-- 连接信息 --><property name="driverClass"value="${driverClass}"></property><property name="jdbcUrl"value="${jdbcUrl2}"></property><property name="user" value="${user}"></property><property name="password" value="${password}"></property></bean>
sessionFactory1

<bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect"><!-- SQLServerDialect   MySQLDialect  -->org.hibernate.dialect.SQLServerDialect</prop><!-- 显示sql语句 --><prop key="show_sql">true</prop><!-- 自动建表<prop key="hibernate.hbm2ddl.auto">update</prop>  --></props></property><property name="mappingResources"><list><!-- 用户 --><value>com/hhit/entity/User.hbm.xml</value><span style="white-space:pre"></span></list></property></bean>

sessionFactory2

<bean id="sessionFactory2"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSourceB" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect"><!-- SQLServerDialect   MySQLDialect  -->org.hibernate.dialect.SQLServerDialect</prop><!-- 显示sql语句 --><prop key="show_sql">true</prop><!-- 自动建表<prop key="hibernate.hbm2ddl.auto">update</prop>  --></props></property><property name="mappingResources"><list><!-- 考试监控系统--><value>com/hhit/entity/TestingControl.hbm.xml</value><value>com/hhit/entity/TestRoom.hbm.xml</value></list></property></bean>

DaoSupportImpl

public class DaoSupportImpl<T> implements IDaoSupport<T> {@Resourceprivate SessionFactory sessionFactory;private Class<T> clazz;public DaoSupportImpl(){//使用反射得到T的真实类型//获取new的对象的泛型的父类类型ParameterizedType pt= (ParameterizedType) this.getClass().getGenericSuperclass();//获取第一个类型的真实类型this.clazz=(Class<T>) pt.getActualTypeArguments()[0];System.out.println("--->clazz"+clazz);}/** * 获取当前Session对象 * protected子类中可以得到 * @return */protected Session getSession(){//if(sessionFactory.getCurrentSession()==null)//return sessionFactory.openSession();return sessionFactory.getCurrentSession();}@Overridepublic void save(T entity) {getSession().save(entity);}}

DaoSupportImpl2

public class DaoSupportImpl2<T> implements IDaoSupport<T> {@Resource(name="sessionFactory2")private SessionFactory sessionFactory2;private Class<T> clazz;public DaoSupportImpl2(){//使用反射得到T的真实类型//获取new的对象的泛型的父类类型ParameterizedType pt= (ParameterizedType) this.getClass().getGenericSuperclass();//获取第一个类型的真实类型this.clazz=(Class<T>) pt.getActualTypeArguments()[0];System.out.println("--->clazz"+clazz);}/** * 获取当前Session对象 * protected子类中可以得到 * @return */protected Session getSession(){//if(sessionFactory.getCurrentSession()==null)//return sessionFactory.openSession();return sessionFactory2.getCurrentSession();}@Overridepublic void save(T entity) {getSession().save(entity);}}

这种做法的关键是在basedao,也就是我的DaoSupportImpl中定义的private SessionFactory sessionFactory;和DaoSupportImpl2中定义的private SessionFactory sessionFactory2;用注解让sessionfactory按照名称注入,与spring配置文件中的sessionfactory名称相对应,然后不同数据源的dao继承不同的DaoSupportImpl。当然,其中DaoSupportImpl使用了匿名类。

0 0
原创粉丝点击