91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中如何使用JFinal框架動態切換數據庫

發布時間:2021-03-22 09:12:26 來源:億速云 閱讀:248 作者:小新 欄目:開發技術

這篇文章主要介紹了Java中如何使用JFinal框架動態切換數據庫,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

需求:需要根據企業ID切換對應的數據庫,同時,后期可動態增加數據庫配置

JFinal框架中對于對于多數據源配置有兩種方式:
1.通過配置文件配置,有多少數據庫就要配置多少,服務啟動時加載所有數據庫,缺點:不能動態增加數據庫
2.只配置一個主數據庫信息就可以了,其他數據庫信息保存在表中,通過讀取表數據加載數據庫連接,優點:在數據表中增加數據庫配置即可動態增加數據庫連接。

本次主要介紹第2種方法:

一、新建數據表:保存數據庫連接信息

Java中如何使用JFinal框架動態切換數據庫

配置表對應的實體類

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框架動態切換數據庫”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佛山市| 冀州市| 壶关县| 屯留县| 扎赉特旗| 沽源县| 南安市| 嵊州市| 手机| 广州市| 梅河口市| 弥渡县| 金寨县| 岐山县| 霍林郭勒市| 资兴市| 祥云县| 哈密市| 乡宁县| 辽阳市| 建阳市| 台州市| 灵璧县| 龙口市| 遂平县| 安溪县| 洛宁县| 汤原县| 额敏县| 普兰县| 洞口县| 铜陵市| 长白| 平江县| 云霄县| 西城区| 筠连县| 南城县| 东乡| 张家港市| 福海县|