Java中JFinal框架动态切换数据库的方法

 更新时间:2021年03月21日 12:08:45   作者:Mongo_Z  
这篇文章主要介绍了Java中JFinal框架动态切换数据库的方法,本文通过两种方法结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

需求:需要根据企业ID切换对应的数据库,同时,后期可动态增加数据库配置

JFinal框架中对于对于多数据源配置有两种方式:
1.通过配置文件配置,有多少数据库就要配置多少,服务启动时加载所有数据库,缺点:不能动态增加数据库
2.只配置一个主数据库信息就可以了,其他数据库信息保存在表中,通过读取表数据加载数据库连接,优点:在数据表中增加数据库配置即可动态增加数据库连接。

本次主要介绍第2种方法:

一、新建数据表:保存数据库连接信息

数据库配置表.png

配置表对应的实体类

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框架动态切换数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中使用JavaScript脚本的方法步骤

    Java中使用JavaScript脚本的方法步骤

    这篇文章主要介绍了Java中使用JavaScript脚本的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 浅谈foreach写失效的问题

    浅谈foreach写失效的问题

    下面小编就为大家带来一篇浅谈foreach写失效的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 关于MyBatis10种超好用的写法(收藏)

    关于MyBatis10种超好用的写法(收藏)

    这篇文章主要介绍了关于MyBatis10种超好用的写法(收藏),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • idea中使用(Revert Commit)图解

    idea中使用(Revert Commit)图解

    这篇文章主要介绍了idea中使用(Revert Commit)图解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 从0开始学习大数据之java spark编程入门与项目实践

    从0开始学习大数据之java spark编程入门与项目实践

    这篇文章主要介绍了从0开始学习大数据之java spark编程入门与项目实践,结合具体入门项目分析了大数据java spark编程项目建立、调试、输出等相关步骤及操作技巧,需要的朋友可以参考下
    2019-11-11
  • 详解java IO流之缓冲流的使用

    详解java IO流之缓冲流的使用

    本文主要介绍了java的IO流中的缓冲流的使用,缓冲流分为字节和字符缓冲流。分享了有关它们的实例代码,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 关于Logback+MyBatis日志输出问题的一些思考

    关于Logback+MyBatis日志输出问题的一些思考

    这篇文章主要介绍了关于Logback+MyBatis日志输出问题的一些思考,具有很好的参考价值,希望对大家有所帮助,
    2023-09-09
  • Java旋转数组中最小数字具体实现(图文详解版)

    Java旋转数组中最小数字具体实现(图文详解版)

    这篇文章主要给大家介绍了关于Java旋转数组中最小数字具体实现的相关资料,旋转数组,说明数据不变,只是改变位置,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • Spring MVC打印@RequestBody、@Response日志的方法

    Spring MVC打印@RequestBody、@Response日志的方法

    这篇文章主要介绍了Spring MVC打印@RequestBody、@Response日志的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • SpringBoot整合Gson 整合Fastjson的实例详解

    SpringBoot整合Gson 整合Fastjson的实例详解

    这篇文章主要介绍了SpringBoot整合Gson 整合Fastjson的实例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11

最新评论