基于多模块实现表跨库关联查询
场景描述
一个项目可以建立多个服务模块,每个服务模块可以对应不同的数据库,例如:主服务main模块要和oa服务模块下的数据表进行关联查询,平台提供基于多模块实现表跨库关联查询设置
操作步骤
一、创建服务模块
- 在应用架构中引入市场服务模板组件
- 架构中拖入服务模板,新建服务模块名称,服务名称规则为:只允许包含字母和数字且必须以字母开头,
- 创建服务模块后,在代码资源中可看到生成的对应服务目录
二、配置服务模块数据源
- 每个服务模块都可以配置不同的数据库(前提是相同数据库服务器)
- 架构中拖入数据库组件和数据库类型,数据库组件可以拖入存储类型中未被引用的数据库组件,
当服务模块较多不够用时,也可以从市场添加数据库组件
- 服务模块添加后默认连线业务数据库,数据库组件拖入后默认连线pgsql数据库,改到要使用的数据库类型,添加的服务连线到对应数据库(开发和运行时架构都需要独立连线配置一遍)
- 如图:主服务main模块和添加的服务模块都使用sqlserver数据库,数据库参数连接不同的数据库
- 数据库参数的设置,可以在开发架构中配置,也可以在运行时配置,区别在于开发架构中不配置数据库参数(是否外部数据库为否,参数为空),则发布后可以在运行时应用服务管理中切换数据库后,重启应用即可
四、添加端,用于承载其他数据库数据模型
- 在高级-多项目多应用拓展中,添加新的端,服务标识必须跟创建的服务名xxx相同,如图添加的服务标识为Capmsplan,配置如下
- 切换到新增加的端,在数据定义里,可以从平台新建数据集,也可以从外部数据库导入数据模型
五、引入其他服务模块数据跨库查询
一、前端使用
动态数据集
- 要在主服务里显示其他服务模块数据模型时,需要在对应服务模块下增加配置文件(暂时需代码手工修改)
- export.json配置完后,在主服务下就可使用其他数据库数据模型了(若数据中未显示,在数据栏中点击刷新),如图为:在主服务中显示oa服务模块下配置要关联使用的数据集
如果多个模块连接的数据库信息完全一致可以在页面中直接引入数据集,就可以和主服务数据集进行关联查询设置了
如果多个模块连接的数据库信息不一样,就存在跨库的问题,需要通过设置输出数据集的方式实现跨库关联查询设置了,可以参考跨应用关联查询中输出数据集的设置
- 要在主服务里显示其他服务模块数据模型时,需要在对应服务模块下增加配置文件(暂时需代码手工修改)
存储过程数据集
- 对于要使用其他数据库的存储过程定义存储过程数据集时,只需要在存储过程名中设置数据库名.实例名.存储过程名即可
- 对于要使用其他数据库的存储过程定义存储过程数据集时,只需要在存储过程名中设置数据库名.实例名.存储过程名即可
sql数据集
- 对于在sql数据集定义中要使用其他数据库表关联设置时,只需要设置关联的表加上数据库名.实例名即可
- 对于在sql数据集定义中要使用其他数据库表关联设置时,只需要设置关联的表加上数据库名.实例名即可
二、后端使用
如果要在服务端代理中sql操作其他数据源中的表还需要如下配置(注:如下以服务名为Capmsplan为例):
- 切换都代码页修改model\Capmsplan\deploy下的dev.def.xml和production.def.xml文件添加如下配制
<property name="originDbUrl" value="@jdbcUrl('db')@" readonly="true"/>
- 在model\service\main\deploy下的dev.def.xml和production.def.xml文件添加如下配制
<property name="CapmsplanDbUrl" value="${Capmsplan.originDbUrl}" readonly="true"/>
<property name="CapmsplanDbUser" value="${Capmsplan.dbUser}" readonly="true"/>
<property name="CapmsplanDbPasswd" value="${Capmsplan.dbPasswd}" readonly="true"/>
在uses节点中添加
<use name=" Capmsplan " instance=" Capmsplan "/>
创建model\service\main\src\main\java\main\common\config目录 在目录下创建DatasourceConfig.java文件
在model\service\main\src\main\java\main下的service文件中如下通过sql语句操作数据库 (1) 加引用@Configuration
@Autowired @Qualifier("CapmsplanDataSource") private DataSource CapmsplanDataSource;
(2) Java中链接数据源操作sql