spring2.0+hibernate3.0配置多个数据库

Spring包装Hibernate的话所有的基本配置都写在applicationContext.xml文件中.

<!-- (读) 数据源 -->
<bean id="readDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${readDataSource.driver}</value>
</property>
<property name="url">
<value>${readDataSource.url}</value>
</property>
<property name="username">
<value>${readDataSource.name}</value>
</property>
<property name="password">
<value>${readDataSource.password}</value>
</property>
</bean>

<!-- (写) 数据源 -->
<bean id="writeDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${writeDataSource.driver}</value>
</property>
<property name="url">
<value>${writeDataSource.url}</value>
</property>
<property name="username">
<value>${writeDataSource.name}</value>
</property>
<property name="password">
<value>${writeDataSource.password}</value>
</property>
</bean>

<!-- hibernate配置文件 -->
<bean id="hibernateconfig" class="org.springframework.core.io.ClassPathResource">
<constructor-arg value="hibernate.cfg.xml"></constructor-arg>
</bean>

<!-- (读)hibernate数据库链接 -->
<bean id="readSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="readDataSource"></property>
<property name="configLocation" ref="hibernateconfig"></property>
</bean>

<!-- (写)hibernate数据库链接 -->
<bean id="writeSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="writeDataSource"></property>
<property name="configLocation" ref="hibernateconfig"></property>
</bean>

<!-- (读)jdbc模板 -->
<bean id="readJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource"><ref local="readDataSource"/></property>
</bean>

<!-- (写)jdbc模板 -->
<bean id="writeJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource"><ref local="writeDataSource"/></property>
</bean>


我遇到的情况是配置完后tomcat6能启动,但是访问是就抛出no bean named 'sessionFactory'is defined
原因是在web.xml中有配置sessionFilter的过滤器,它用来控制session的开关,它指向的类是
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
这个类中有个setSessionFactoryBeanName的方法默认值是“sessionFactory”,而我把sessionFactory的名字改为了readSessionFactory和wirteSessionFactory。
这时可以去web.xml中设置sessionFactory的beanName为
readSessionFactory或wirteSessionFactory,但是只能设置一个值,而我要用的是双数据库。最后的解决方案是我在web.xml配置了两个filter把sessionFactoryBeanName初始化成不同的值代码如下

<filter>
<filter-name>readSessionFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>readSessionFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>readSessionFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

<filter>
<filter-name>writeSessionFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>writeSessionFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>writeSessionFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

这时你在配置dao时就可选择不同的sessionFactory,而且他们的session就交由不同的filter控制开关了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值