这篇文章主要介绍了Java中如何使用JFinal框架动态切换数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
需求:需要根据企业ID切换对应的数据库,同时,后期可动态增加数据库配置
JFinal框架中对于对于多数据源配置有两种方式:
1.通过配置文件配置,有多少数据库就要配置多少,服务启动时加载所有数据库,缺点:不能动态增加数据库
2.只配置一个主数据库信息就可以了,其他数据库信息保存在表中,通过读取表数据加载数据库连接,优点:在数据表中增加数据库配置即可动态增加数据库连接。
本次主要介绍第2种方法:
一、新建数据表:保存数据库连接信息
配置表对应的实体类
public class DbDto { private String comp_id; private String comp_name; private String dbname; private String dbhost; private String dbuser; private String dbpwd; private String prefix; private String charset; private String is_default;}
二、切换数据库公共方法,根据企业ID切换对应的数据库(需要依赖druid)
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框架动态切换数据库”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!