簡體   English   中英

如何使用Spring + Hibernate開發可同時在多個數據庫上運行的應用程序?

[英]How can I develop an application which will run on more than one database at a same time using Spring + Hibernate?

我正在使用Spring + Hibernate開發Java應用程序。 我希望此應用程序可以同時在多個數據庫上運行。

例如,如果用戶嘗試搜索某些數據,則應用程序必須同時在所有已配置的數據源中搜索該數據。

我正在尋找一種解決方案,它將為每個數據源創建不同的線程,並且當用戶執行任何操作時,所有線程都需要執行該操作

編輯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);
    }
}

現在,從服務類別i將調用persistEngine的方法EngineDAO類參數作為String[] DataSourceNames所以此操作需要對作為參數提供的所有數據源執行的。 為此我需要做哪些所有更改? 提前致謝

您可以具有多個SessionFactoryEntityManagerFactory對象,每個對象都與不同的DataSource關聯。 如果要管理跨不同數據源的事務,建議使用JTA Transaction Manager 如果您的應用程序不在Java EE環境中運行,則可以使用某些第三方JTA事務管理器,例如Atomikos Transaction Manager

Stackoverflow上有一些討論此問題的線程。 嘗試這個

編輯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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM