[英]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
所以此操作需要對作為參數提供的所有數據源執行的。 為此我需要做哪些所有更改? 提前致謝
您可以具有多個SessionFactory
或EntityManagerFactory
對象,每個對象都與不同的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.