為什么要有多數據源?
通常一個系統只需要連接一個數據庫就可以了,Jeecg數據源是配置在spring-mvc-hibernate.xml文件中,這種數據源我們叫做主數據源。但是在企業應用的開發中往往會和其他子系統交互,特別是對於一些數據實時性要求比較高的數據,我們就需要做實時連接查詢,而不是做同步。這個時候就需要用到多數據源。 舉個簡單的例子某企業要做訂單網上訂單系統這里面就可以涉及到多個子系統的連接,比如:產品主數據的數據源,項目管理系統的數據源(項目可以產品訂單)等多個不同數據庫類似的數據源,他們可能是ORACLE,SQL SERVER,MYSQL等多種混合數據源。
Jeecg多數據源的設計原理
多數據源的設計有多種方案,網上有很多是設計在spring-mvc-hibernate.xml文件中,通過在不同線程中datasource動態切換來實現,這樣使得配置,程序太過復雜,所以Jeecg並沒有使用這種方法。 Jeecg多數據源設計很簡單就是直接利用 springjdbc連接,跟Hibernate或者MyBatis等持久化框架無關。就是我們最原始的類似JDBC的連接原理一樣,只不過我們這里使用了springjdbc更加成熟的連接方法。 我們把多數據源的配置信息單獨放在t_s_data_source表里維護管理。
Jeecg多數據的實現方法:
創建t_s_data_source表,結構如下,並把該表的內容在TOMCAT啟動時添加到緩存(緩存機制查看類:InitListener),以t_s_data_source.key字段為key值,以t_s_data_source的實體類為value放到static Map中
id |
db_key |
description |
driver_class |
url |
db_user |
db_password |
db_type |
|
SAP_DB |
sap db |
oracle.jdbc.driver.OracleDriver |
jdbc:oracle:thin:@10.10.0.59:1521:mid |
CRM |
CRM2013 |
oracle |
|
|
|
|
新建動態數據的操作類:org.jeecgframework.core.util.DynamicDBUtil.java,該類集中放置了對數據庫的連接,SQL查詢,更新,刪除,添加等操作常用方法。
- 系統管理-多數據源管理菜單可以實際對t_s_data_source表的維護
- 在Service層即可以調用DynamicDBUtil中的方法得到數據庫連接並可以執行SQL
- 舉例:
- 插入修改數據:DynamicDBUtil.update('SAP_DB','delete from user ??'); 返回:int
- 查詢單條數據: DynamicDBUtil .findOne('SAP_DB','delete from user ??'); 返回:Map<String, Object>
- 查詢數據列表:DynamicDBUtil.findList('SAP_DB','delete from user ??'); 返回:List<Map<String, Object>>