admin 发表于 2015-3-4 14:45:40

Jeecg多数据源设计

Jeecg多数据源设计


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

David2015 发表于 2015-3-12 15:45:36

系统管理下没有多数据源管理菜单

huangdj 发表于 2015-3-12 16:17:40

本帖最后由 huangdj 于 2015-3-12 16:19 编辑

非常有用,好好看看实现思路

David2015 发表于 2015-3-12 16:34:23

huangdj 发表于 2015-3-12 16:17 static/image/common/back.gif
非常有用,好好看看实现思路

不是有用没用的问题,而是根本就无法做配置,因为没有相应的菜单。实现该功能的菜单在哪里?????

huangdj 发表于 2015-3-12 17:14:00

不是,作者只是提供了工具类。

David2015 发表于 2015-3-12 17:41:28

下面的图片何解????难道我们不能在页面级进行维护?只能手动更改数据库???

jnuxiehaiming 发表于 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)

求指导。
页: [1]
查看完整版本: Jeecg多数据源设计