关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 33399|回复: 6

Jeecg多数据源设计

[复制链接]
发表于 2015-3-4 14:45:40 | 显示全部楼层 |阅读模式
Jeecg多数据源设计

  • 为什么要有多数据源?
         
    通常一个系统只需要连接一个数据库就可以了,Jeecg数据源是配置在spring-mvc-hibernate.xml文件中,这种数据源我们叫做主数据源。但是在企业应用的开发中往往会和其他子系统交互,特别是对于一些数据实时性要求比较高的数据,我们就需要做实时连接查询,而不是做同步。这个时候就需要用到多数据源。
         
    举个简单的例子某企业要做订单网上订单系统这里面就可以涉及到多个子系统的连接,比如:产品主数据的数据源,项目管理系统的数据源(项目可以产品订单)等多个不同数据库类似的数据源,他们可能是ORACLESQL     SERVERMYSQL等多种混合数据源。
  • 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

发表于 2015-3-12 15:45:36 | 显示全部楼层
系统管理下没有多数据源管理菜单
无多数据源管理菜单.png
发表于 2015-3-12 16:17:40 | 显示全部楼层
本帖最后由 huangdj 于 2015-3-12 16:19 编辑

非常有用,好好看看实现思路
发表于 2015-3-12 16:34:23 | 显示全部楼层
huangdj 发表于 2015-3-12 16:17
非常有用,好好看看实现思路

不是有用没用的问题,而是根本就无法做配置,因为没有相应的菜单。实现该功能的菜单在哪里?????
发表于 2015-3-12 17:14:00 | 显示全部楼层
不是,作者只是提供了工具类。
发表于 2015-3-12 17:41:28 | 显示全部楼层
下面的图片何解????难道我们不能在页面级进行维护?只能手动更改数据库???
多数据源.png
发表于 2016-3-31 21:58:21 | 显示全部楼层
多数据源报错如下:
代码行:DynamicDataSourceEntity dynamicSourceEntity = DynamicDataSourceEntity.DynamicDataSourceMap
                                .get(dbKey);
                System.out.println("databasetype-" + dynamicSourceEntity);
获取到的null
报错如下
jaava.lang.NullPointerException
        at org.jeecgframework.core.util.SqlUtil.jeecgCreatePageSql(SqlUtil.java:143)

求指导。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表