java - 如何使用 Spring + Hibernate 开发一款可以同时在多个数据库上运行的应用程序?

标签 java spring hibernate multiple-databases

我正在使用 Spring + Hibernate 开发 Java 应用程序。我希望这个应用程序同时在多个数据库上运行。

For Example if user tries to search for some data, Application has to search for that data in all the configured data-sources at a same time.

我正在寻找一种解决方案,该解决方案将为每个数据源创建不同的线程,并且当用户执行任何操作时,所有线程都需要执行该操作

编辑 1 下面让我详细解释一下我的问题是我的 DAO 类

@Repository("engineDAO")
public class EngineDAOImpl implements EngineDAO {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public void persistEngine(Engine engine, String[] DataSourceNames) {
        sessionFactory.getCurrentSession().persist(engine);
    }
}

现在,从服务类中,我将调用 EngineDAO 类的 persistEngine 方法,参数为 String[] DataSourceNames,因此需要执行此操作作为参数提供的所有数据源。为此我必须做出哪些改变? 提前致谢

最佳答案

您可以拥有多个 SessionFactoryEntityManagerFactory 对象,每个对象与不同的 DataSource 关联。如果您想管理跨不同数据源的事务,我建议使用JTA Transaction Manager。如果您的应用程序不是在Java EE环境中运行,您可以使用一些第3方JTA事务管理器,例如Atomikos Transaction Manager

Stackoverflow 上有一些帖子讨论了这个问题。 Try this

编辑 1: 如果您需要按名称选择数据源,那么您的DAO可以实现BeanFactoryAware,您将获得BeanFactory对象,您可以使用它来访问SessionFactory bean 的名字。 你的代码应该看起来像这样

@Repository("engineDAO")
public class EngineDAOImpl implements EngineDAO, BeanFactoryAware {

    private org.springframework.beans.factory.BeanFactory beanFactory;

    @Override
    public void persistEngine(final Engine engine, final String[] sessionFactoryNames) {
        for (final String sessionFactoryName : sessionFactoryNames) {
            final SessionFactory sessionFactory = beanFactory.getBean(sessionFactoryName, SessionFactory.class);
            sessionFactory.getCurrentSession().persist(engine);
        }
    }

    @Override
    public void setBeanFactory(final BeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }
}

关于java - 如何使用 Spring + Hibernate 开发一款可以同时在多个数据库上运行的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28872295/

相关文章:

java - Spring - JMS,在 JMS activemq 服务器启动/停止几次后,监听器服务器抛出 java.io.EOFException,然后不连接到正在运行的 JMS

java - 在部署 tomcat 时挂起并给出异常

java - 多线程性能

java - 使用 XSLT 中的 id 选择 XML 值

java - 在项目源或资源 GWT 中找不到类

java - 地址在本地计算机上无效 [仅限 Windows 8]

java - 如何使用 Spring Boot(服务器端)和 Angular(前端)将 100K 数据加载到表中

java - Spring的CAS服务属性中如何正确设置服务URL

java - 手动回滚 Spring MVC + Hibernate

java - Hibernate <generator> 混淆