2017-09-04 28 views
0

我希望爲我的應用程序提供可選的輔助數據庫,以便如果輔助數據庫存在於部署環境中,存儲庫可以從中檢索數據,但是如果它不存在,那麼應用程序對於主數據庫仍然可以正常工作,並且存儲庫將以應用程序可以知道此數據源不可用的方式運行。Spring引導如何添加可能存在或可能不存在的第二個數據源

我完全可以想到完成這種類型的事情的方法,但我想知道是否有一個更直接的配置類型的方式來實現這一點。或者,如果有模式類型的處理方式是可取的。

回答

1

只需實現2個數據庫配置並使用@Primary註釋對其中一個數據庫進行註釋,就可以以一種乾淨的方式使用多個數據庫。

@Bean(name = "mainDataSource") 
@Primary 
public DataSource mainDataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    dataSource.setDriverClassName(driver); 
    dataSource.setUrl(url); 
    dataSource.setUsername(username); 
    dataSource.setPassword(password); 
    return dataSource; 
} 

而對於輔助數據庫,您可以創建幾乎相同,但不要將@Primary註釋放在它上面。

@Bean(name = "secondaryDataSource") 
public DataSource secondaryDataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    dataSource.setDriverClassName(driver); 
    dataSource.setUrl(url); 
    dataSource.setUsername(username); 
    dataSource.setPassword(password); 
    return dataSource; 
} 

注意,你不需要把@Primary註釋只是對數據源豆,但在任何豆你用它來連接到數據庫。

完成此操作後,您所要做的就是註釋您的EntityManager或您通常與@Qualifier一起使用的任何其他連接管理器。

@Autowired 
@Qualifier("mainEntityManager") 
private EntityManager mainDatabase; 

@Autowired 
@Qualifier("secondEntityManager") 
private EntityManager secondDatabase; 

就我而言,我更喜歡做一個類在後臺管理這個。 您可以在my article on linkedin.上找到完整的示例,並查看example code on GitHub

+0

感謝您的回答。我將如何處理第二個數據庫不存在的情況?春天還會加載好嗎?那麼我有沒有辦法以編程方式處理這種情況? – user123959

+0

即使應用程序在啓動過程中無法連接到數據庫,應用程序也會按預期啓動。之後,您可以處理檢查,如果第二個檢查失敗,則可以更改爲第一個檢查。您也可以嘗試手動更改JDBC連接池以嘗試在啓動時避免這種情況,如果您願意,可以查看[示例以幫助您計算方式](https://stackoverflow.com/a/23507135/4835819) ,但在您的情況下,我會選擇將主數據庫指向更可靠的服務器,以跳過此類錯誤消息。 –

相關問題