Spring-Hibernate使用多个数据源/数据库 [英] Spring-Hibernate using multiple datasource/database
问题描述
我正在开发一个使用Spring MVC 3和Hibernate的Web应用程序。我希望为我的Web应用程序使用2个数据源MySql和Oracle数据库。
p>
我已经阅读了很多关于spring-hibernate multiple datasource / database
的教程和问题解答,例如:
directjump2java.blogspot.com a>
等。
但是当我每次运行它时,配置只是读取我的第一个数据库配置(MySql)
并显示此错误r 表'db_prod.ksei_lookup_holiday'不存在
db.prod是我的第一个数据库(MySql),KSEI_LOOKUP_HOLIDAY是我的第二个数据库(Oracle),
这是我的spring.xml
< tx:annotation-driven transaction-manager = transactionManager的/>
< tx:注解驱动的事务管理器=transactionManagerSOAAPP/>
< context:annotation-config />
< context:component-scan base-package =prod.support/>
<! - Database MySql,Desktop - >
< bean id =dataSourceclass =org.apache.commons.dbcp.BasicDataSource
destroy-method =close>
< property name =driverClassNamevalue =com.mysql.jdbc.Driver/>
< property name =usernamevalue =root/>
< property name =passwordvalue =shikamaru/>
< / bean>
< bean id =sessionFactory
class =org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean>
< property name =configurationClassvalue =org.hibernate.cfg.AnnotationConfiguration>< / property>
< property name =dataSourceref =dataSource>< / property>
< property name =hibernateProperties>
<道具>
< prop key =hibernate.dialect> org.hibernate.dialect.MySQL5Dialect< / prop>
< prop key =hibernate.show_sql> true< / prop>
< /道具>
< / property>
< property name =packagesToScanvalue =prod.support.model.splatter/>
< / bean>
< bean id =transactionManager
class =org.springframework.orm.hibernate3.HibernateTransactionManager
p:sessionFactory-ref =sessionFactory>
< / bean>
<! - Database Oracle,Schema:SOAAPP - >
< bean id =dataSourceSOAAPPclass =org.apache.commons.dbcp.BasicDataSource
destroy-method =close>
< property name =driverClassNamevalue =oracle.jdbc.driver.OracleDriver/>
< property name =urlvalue =jdbc:oracle:thin:@localhost:1521:XE/>
< property name =usernamevalue =splatter/>
< property name =passwordvalue =shikamaru/>
< / bean>
< bean id =sessionFactorySOAAPP
class =org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean>
< property name =configurationClassvalue =org.hibernate.cfg.AnnotationConfiguration>< / property>
< property name =dataSourceref =dataSource>< / property>
< property name =hibernateProperties>
<道具>
< prop key =hibernate.dialect> org.hibernate.dialect.Oracle10gDialect< / prop>
< prop key =hibernate.show_sql> true< / prop>
< /道具>
< / property>
< property name =packagesToScanvalue =prod.support.model.soaapp/>
< / bean>
< bean id =transactionManagerSOAAPP
class =org.springframework.orm.hibernate3.HibernateTransactionManager
p:sessionFactory-ref =sessionFactorySOAAPP>
< / bean>
这是我的DAO实现我的第一个数据库(MySql)
@Repository
@Qualifier(value =sessionFactory)
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
@Autowired
private UserDaoImpl(SessionFactory sessionFactory){
setSessionFactory(sessionFactory);
$ b这是我的第二个数据库(Oracle)的DAO实现
$ $ $
$ @ b $ @ b $ b @Qualifier(value =sessionFactorySOAAPP)
public class UpdateKSEIDaoImpl extends HibernateDaoSupport implements UpdateKSEIDao {
@Autowired
private UpdateKSEIDaoImpl(SessionFactory sessionFactorySOAAPP){
setSessionFactory(sessionFactorySOAAPP);
}
任何帮助都会令您高兴:)
问题是您已经使用过了
< property name = dataSourceref =dataSource>< / property>
in sessionFactorySOAAPP
。
您应该使用< property name =dataSourceref =dataSourceSOAAPP>< / property>
I'm working on a web application that uses Spring MVC 3 and Hibernate
I want to use 2 datasource MySql and Oracle databases for my web application,
I've been read many tutorial and problem solving for "spring-hibernate multiple datasource/database" for example :
and etc.
but when every single time I run it, the config just read my first database config (MySql)
and show this error Table 'db_prod.ksei_lookup_holiday' doesn't exist
db.prod is my first database(MySql) and KSEI_LOOKUP_HOLIDAY is my second database (Oracle),
this is my spring.xml
<tx:annotation-driven transaction-manager="transactionManager"/>
<tx:annotation-driven transaction-manager="transactionManagerSOAAPP"/>
<context:annotation-config />
<context:component-scan base-package="prod.support" />
<!-- Database MySql, Desktop -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db_prod" />
<property name="username" value="root" />
<property name="password" value="shikamaru" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"></property>
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="packagesToScan" value="prod.support.model.splatter" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory">
</bean>
<!-- Database Oracle, Schema : SOAAPP -->
<bean id="dataSourceSOAAPP" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
<property name="username" value="splatter" />
<property name="password" value="shikamaru" />
</bean>
<bean id="sessionFactorySOAAPP"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"></property>
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="packagesToScan" value="prod.support.model.soaapp" />
</bean>
<bean id="transactionManagerSOAAPP"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactorySOAAPP">
</bean>
this is my DAO Implementation for my first database (MySql)
@Repository
@Qualifier(value="sessionFactory")
public class UserDaoImpl extends HibernateDaoSupport implements UserDao{
@Autowired
private UserDaoImpl(SessionFactory sessionFactory){
setSessionFactory(sessionFactory);
}
this is my DAO Implementation for my second database (Oracle)
@Repository
@Qualifier(value="sessionFactorySOAAPP")
public class UpdateKSEIDaoImpl extends HibernateDaoSupport implements UpdateKSEIDao{
@Autowired
private UpdateKSEIDaoImpl(SessionFactory sessionFactorySOAAPP){
setSessionFactory(sessionFactorySOAAPP);
}
any help will be pleasure :)
The problem is that you have used
<property name="dataSource" ref="dataSource"></property>
in sessionFactorySOAAPP
.
You should have used <property name="dataSource" ref="dataSourceSOAAPP"></property>
这篇关于Spring-Hibernate使用多个数据源/数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!