Spring Boot + Spring Data JPA 配置多個 DataSource
環境準備 |
|
1. | 建立多個不同的資料庫儲存空間 |
此例使用 PostgreSQL,在同一個 database (testdb) 下,建立三個 schema:demo_a, demo_b, demo_c 分別在底下建立 table (table_a, table_b, table_c) 並寫入測試資料 準備好資料庫的連線資訊稍後設定:jdbc:postgresql://127.0.0.1:5432/testdb |
|
2. | 建立 Spring Boot 專案 |
使用 Spring Initializr 建立,並加入必要的依賴:
將產生的專案引入 IDE (Eclipse) |
開始撰寫 |
|
1. | 在 application.properties 中設定三組連線資訊 |
key 可自訂,但同一組的 prefix 需相同。
|
|
2. | 建立 packages |
不同連線的 entity, repository 不可放在相同的 package 下,可如下圖配置: |
|
3. | 依照 Spring Data JPA 規範,建立 entity 及 repository 類別 |
建立 table_a 的 entity 及 repository TableADao.java 建立 table_b 的 entity 及 repository TableBDao.java 建立 table_c 的 entity 及 repository TableCDao.java |
|
4. | 透過 Java Config 方式自訂 DataSource,並為每個 DataSource 分別建立各自的 EntityManagerFactory, TransactionManager。 |
AConfig.java
BConfig.java CConfig.java |
|
5. | 建立 Service 類別以利測試 |
AService.java
BService.java CService.java |
|
6. | 進行測試 |
利用 CommandLineRunner (覆寫 執行結果: |
額外加碼 |
|
以下說明當客製實作 Spring JPA Repositories 時,如何使用多個連線設定。 |
|
1. | 依照 Spring Data JPA 的規範,擴增 TableADao.java,並建立客製實作類別 TableADaoImpl.java |
改寫 TableADao.java,增加 queryAll() 方法 新增 TableADaoImpl.java,實作 queryAll()
TableBDao.java TableBDaoImpl.java TableCDao.java TableCDaoImpl.java |
|
2. | 改寫 Service 類別以利測試 |
在 AService.java, BService.java 以及 CService.java 各自增加 queryAll() 方法,並呼叫客製自訂的 repository 方法:queryAll()
|
|
3. | 改寫 MultidsApplication.java,修改測試流程 |
在呼叫 |
|
4. | 執行並查看測試結果 |
|
參考文章 |