需求:需要根據企業ID切換對應的數據庫,同時,后期可動態增加數據庫配置
JFinal框架中對于對于多數據源配置有兩種方式:
1.通過配置文件配置,有多少數據庫就要配置多少,服務啟動時加載所有數據庫,缺點:不能動態增加數據庫
2.只配置一個主數據庫信息就可以了,其他數據庫信息保存在表中,通過讀取表數據加載數據庫連接,優點:在數據表中增加數據庫配置即可動態增加數據庫連接。
本次主要介紹第2種方法:
一、新建數據表:保存數據庫連接信息
配置表對應的實體類
- public class DbDto {
- /**
- * 企業ID
- */
- private String comp_id;
- /**
- * 企業名稱
- */
- private String comp_name;
- /**
- * 企業數據庫名
- */
- private String dbname;
- /**
- * 連接地址(ip + 端口號)
- */
- private String dbhost;
- /**
- * 用戶名
- */
- private String dbuser;
- /**
- * 用戶密碼
- */
- private String dbpwd;
- /**
- * 表名前綴
- */
- private String prefix;
- /**
- * 編碼類型
- */
- private String charset;
- /**
- * 默認庫(1:是 0:不是)
- */
- private String is_default;
- }
二、切換數據庫公共方法,根據企業ID切換對應的數據庫(需要依賴druid)
- /**
- * 根據企業ID查詢對應數據庫
- *
- * @param compId 企業ID
- * @return 數據庫配置名
- * @throws Exception 返回處理異常
- */
- public static String chooseDbByCompId(String compId) throws Exception{
- //企業ID為空時,默認使用主數據庫
- if (StringUtils.isBlank(compId)){
- return SYS_TABLE.MASTER_DB;
- }
- DbDto dbDto;
- try {
- //查詢Redis緩存的compId對應的數據庫配置信息
- String jsonStr = RedisClient.getString(SYS.REDIS_COMP_DB + compId);
- if (StringUtils.isNotBlank(jsonStr)){
- dbDto = JSONObject.parseObject(jsonStr, DbDto.class);
- }else {
- //緩存不存在,查詢數據庫
- Record dbRecord = Db.use(SYS_TABLE.MASTER_DB).findFirst("select * from 配置表 where comp_id = ? ", compId);
- //parseObject方法是自己封裝的Record轉實體類方法,在前面的文章有寫過,也是在這個工具類中
- dbDto = parseObject(dbRecord, DbDto.class);
- //加入緩存
- if (dbDto != null){
- RedisClient.setString(SYS.REDIS_COMP_DB + compId, JSONObject.toJSONString(dbDto));
- }
- }
- if (dbDto == null){
- logger.info("切換數據庫失敗,企業不存在或無對應數據庫配置!");
- return null;
- }
- //是否已存在該數據庫連接
- if (DbKit.getConfig(dbDto.getDbname()) == null){
- //創建數據庫連接
- DruidPlugin plugin = new DruidPlugin("jdbc:mysql://" + dbDto.getDbhost()+ "/"+dbDto.getDbname(), dbDto.getDbuser(), dbDto.getDbpwd());
- plugin.start();
- ActiveRecordPlugin arp= new ActiveRecordPlugin(dbDto.getDbname(), plugin);
- arp.start();
- }
- }catch (Exception e){
- logger.error("捕獲異常: 切換數據庫失敗!", e);
- return null;
- }
- return dbDto.getDbname();
- }
這樣根據參數compId即可動態選擇參數對應的數據庫(CommonUtil是我封裝這個方法的工具類)
- Db.use(CommonUtil.chooseDbByCompId(compId)).find(“”);
到此這篇關于Java中JFinal框架動態切換數據庫的方法的文章就介紹到這了,更多相關JFinal框架動態切換數據庫內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_44157394/article/details/115008452