gpt4 book ai didi

java - 如何在 Spring 和 Hibernate 中使用两个数据库/数据源

转载 作者:行者123 更新时间:2023-11-30 09:31:24 26 4
gpt4 key购买 nike

我需要在我的独立应用程序中使用两个数据库,一个本地 HSQLDB 和另一个远程 MySQL。我使用 Spring 3.1.2,Hibernate 4.1.7。到目前为止,我设法只使用 HSQLDB,这就是我的 DAO 和配置的样子:

@Transactional
public abstract class HibernateDao<T, ID extends Serializable> implements Dao<T, ID>{

SessionFactory sessionFactoryHSQL;


public void setSessionFactoryHSQL(SessionFactory sessionFactory) {
this.sessionFactoryHSQL = sessionFactory;
}

public ID save(T object) {
return (ID) getCurrentSession().save(object);
}

public void persist(T object){
getCurrentSession().persist(object);
}

public void update(T object) {
getCurrentSession().update(object);
}

public void delete(T object) {
getCurrentSession().delete(object);
}

public List<T> find(String query) {
return getCurrentSession().createQuery(query).list();
}

public Session getCurrentSession(){
return sessionFactoryHSQL.getCurrentSession();
}
}


<bean id="sessionFactoryHSQL"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="dataSource">
<ref bean="dataSourceHSQL"/>
</property>

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>

<property name="annotatedClasses">
<list>
//annotated classes
</list>
</property>
</bean>

<bean id="txManager" class=
"org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryHSQL" />
</bean>
<tx:annotation-driven transaction-manager="txManagerHSQL" />

<bean id="configHSQL"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>properties/HSQL.properties</value>
</property>
</bean>

<bean id="dataSourceHSQL"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>

我为 MySQL 创建了单独的 bean,例如 sessionFactoryMySQL、dataSourceMySQL(我不打算粘贴它们的实现,因为它们与 HSQL 几乎相同)。我设法正确地将 sessionFactoryMySQL 注入(inject) DAO,但我不能同时使用两个 sessionFactory,例如我不能执行以下操作:

public void persist(T object) {
sessionFactoryHSQL.getCurrentSession().persist(object);
sessionFactoryMySQL.getCurrentSession().persist(object);
}

正如我已经发现的那样,它与事务有关,但我无法正确配置事务管理器。我一直在寻找解决方案很长一段时间,但示例或教程要么不清楚,要么没有提到我的案例。

最佳答案

您需要为两个数据库创建两个 session 工厂。检查简单的逐步示例:Two Datasource in Spring/Hiberate

关于java - 如何在 Spring 和 Hibernate 中使用两个数据库/数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com