最近接手的几个项目对接形式和以往的有所不同,在此整理出来几篇文章简要分享。

以往和外部系统对接一般是http协议,走接口交互形式即使用restful接口对接,相互调用对方的接口以ip+端口号+方法路由形式构建的一个url。那么有些项目对于数据安全性要求很高,对于数据交互要有记录,会要求接口对接以中间表形式进行系统对接,即下发上报不直接走接口通信,而是对数据库进行读写操作。

业务流程:

使用此种对接形式,要先和上层系统确定好需要交互的接口和对应参数。每个接口对应一张接口表,参数为表字段,要有一个自增的主键id和状态status字段用于区分数据和执行状态,调用方每调用一次创建一条记录,接收方定时任务查询该表中新增未接收的记录,接收到后将状态改为已接收状态。当任务完成时候,上报将此任务状态改为已经完成。上层系统定时任务获取WCS上报完成数据,修改自己的状态。WMS还可以将已经下发但是WCS未接收的任务状态修改,实现任务取消功能。

接口表示例:

配置多数据源:

方法一:以包为单位区分数据源使用,即A包中的所有文件使用A数据源,B包中的所有文件使用B数据源。

引入maven依赖:

        <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency>

在resource目录下创建对应数据源的配置文件:

wcs-mysql.properties:

jdbc.wcs.driverClassName = com.mysql.jdbc.Driver
jdbc.wcs.url = jdbc:mysql://localhost:3306/webdemo?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
jdbc.wcs.username = root
jdbc.wcs.password = root

wms-mysql.properties:

jdbc.wms.driverClassName = com.mysql.jdbc.Driver
jdbc.wms.url = jdbc:mysql://localhost:3306/wms_wcs?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
jdbc.wms.username = root
jdbc.wms.password = root

项目中创建一个config目录创建对应数据源的配置文件,用于配置数据源的一些基本参数使用范围和使用的数据源。

WcsDataSourceConfig:

/*** @author zhangqianwei* @date 2022/7/4 20:27*/import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;@Configuration
@PropertySource("classpath:wcs-mysql.properties")  //resource目录下对应的配置文件
//basePackages 指定的是此数据源的使用范围(以包为单位)
@MapperScan(basePackages = "com.test.demo.component.dao.wcsdao", sqlSessionTemplateRef = "wcsSqlSessionTemplate")
public class WcsDataSourceConfig {@Value("${jdbc.wcs.driverClassName}")private String driverClassName;@Value("${jdbc.wcs.url}")private String url;@Value("${jdbc.wcs.username}")private String userName;@Value("${jdbc.wcs.password}")private String password;@Bean(name = "wcsDataSource")public DataSource wcsDataSource() {HikariDataSource hikariDataSource = new HikariDataSource();hikariDataSource.setDriverClassName(driverClassName);hikariDataSource.setJdbcUrl(url);hikariDataSource.setUsername(userName);hikariDataSource.setPassword(password);hikariDataSource.setPoolName("wcs");hikariDataSource.setMaxLifetime(290000);hikariDataSource.setMaximumPoolSize(64);hikariDataSource.setMinimumIdle(4);return hikariDataSource;}@Bean("wcsSqlSessionFactory")public SqlSessionFactory wcsSqlSessionFactory(@Qualifier("wcsDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();sqlSessionFactory.setDataSource(dataSource);sqlSessionFactory.setVfs(SpringBootVFS.class);//配置xml
//        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
//                getResources(""));return sqlSessionFactory.getObject();}@Bean(name = "wcsTransactionManager")public DataSourceTransactionManager wcsTransactionManager(@Qualifier("wcsDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "wcsSqlSessionTemplate")public SqlSessionTemplate wcsSqlSessionTemplate(@Qualifier("wcsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}
}

WmsDataSourceConfig:

/*** @author zhangqianwei* @date 2022/7/4 20:27*/import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;@Configuration
@PropertySource("classpath:wms-mysql.properties")
@MapperScan(basePackages = "com.test.demo.component.dao.wmsdao", sqlSessionTemplateRef = "wmsSqlSessionTemplate")
public class WmsDataSourceConfig {@Value("${jdbc.wms.driverClassName}")private String driverClassName;@Value("${jdbc.wms.url}")private String url;@Value("${jdbc.wms.username}")private String userName;@Value("${jdbc.wms.password}")private String password;@Primary@Bean(name = "wmsDataSource")public DataSource wmsDataSource() {HikariDataSource hikariDataSource = new HikariDataSource();hikariDataSource.setDriverClassName(driverClassName);hikariDataSource.setJdbcUrl(url);hikariDataSource.setUsername(userName);hikariDataSource.setPassword(password);hikariDataSource.setPoolName("wms");hikariDataSource.setMaxLifetime(290000);hikariDataSource.setMaximumPoolSize(64);hikariDataSource.setMinimumIdle(4);return hikariDataSource;}@Primary@Bean(name = "wmsSqlSessionFactory")public SqlSessionFactory wmsSqlSessionFactory(@Qualifier("wmsDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();sqlSessionFactory.setDataSource(dataSource);sqlSessionFactory.setVfs(SpringBootVFS.class);//配置xml
//        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
//                getResources(""));return sqlSessionFactory.getObject();}@Primary@Bean(name = "wmsTransactionManager")public DataSourceTransactionManager wmsTransactionManager(@Qualifier("wmsDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Primary@Bean(name = "wmsSqlSessionTemplate")public SqlSessionTemplate wmsSqlSessionTemplate(@Qualifier("wmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}
}

方法二:使用mybatis-plus集成的多数据源的maven插件(只需要引入maven依赖,在对应的dao层文件上添加注解即可实现)

以下链接是使用文档:

基础必读(免费) · dynamic-datasource · 看云

系统对接之以中间表形式对接,使用SpringBoot整合多数据源相关推荐

  1. CADD分子对接、薛定谔分子对接、AMBER分子动力学能量优化与分析、AIDD人工智能(机器学习与深度学习)药物发现

    分子动力学模拟是分子模拟中最接近实验条件的模拟方法,能够从原子层面给出体系的微观演变过程,直观的展示实验现象发生的机理与规律,促使我们的研究向着更高效.更经济.更有预见性的方向发展.分子动力学可以解决 ...

  2. 对接金蝶凭证K3(java对接)

    讲怎么对接之前先让我吐槽一下,对接金蝶要安装金蝶系统,我自己安装了一次没安装成功,金蝶公司的给我安装了七次也没有成功,最后发给我一个镜像,里面有安装好的金蝶系统才勉强可以,后面的就是这种坑了,对你爱理 ...

  3. 处理字符串_13_按照指定的分隔符截取字符返回表形式

    按照指定的分隔符截取字符返回表形式 需求描述 需求:按照逗号拆分字符串,并指定返回的格式是表. 解决方法:这里需要自定义函数结合substring截取字符串,以达到该效果. 注: 数据库数据集SQL脚 ...

  4. php 海关对接 进口商品_GitHub - kipp01/haiguan: 海关对接 订单申报 php xml加签

    海关对接 订单申报 php xml加签 报文介绍 海关申报有进口申报和出口申报等,根据你的业务类型决定需要对接报文,具体可以咨询客服,本文是以进口订单申报来介绍报文加签申报的过程. 报文有两种:一种是 ...

  5. php 海关对接 进口商品_GitHub - baishaok/haiguan: 海关对接 订单申报 php xml加签

    海关对接 订单申报 php xml加签 报文介绍 海关申报有进口申报和出口申报等,根据你的业务类型决定需要对接报文,具体可以咨询客服,本文是以进口订单申报来介绍报文加签申报的过程. 报文有两种:一种是 ...

  6. 菜鸟积分系统稳定性建设 - 分库分表百亿级数据迁移

    点击上方"服务端思维",选择"设为星标" 回复"669"获取独家整理的精选资料集 回复"加群"加入全国服务端高端社群「后 ...

  7. 【大张嗯哈】开源的ocserv 对接第三方的radius 认证 例如对接宁盾

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.环境 二.安装步骤 1.安装ocserv 2.配置ocserv 3.安装宁盾-AM 总结 前言 提示:这里可以添加 ...

  8. sap系统前台数据与后台表之间_数据治理之SAP软件非生产数据清除方法

    作者:JongWill声明:本文章仅用于SAP软件的应用与学习,不代表SAP公司.(注:文中所示截图来源SAP软件,相应著作权归SAP所有.) 我们知道SAP系统软件往往在使用多年后,底层数据库中的数 ...

  9. 使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表

    原文:使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表 我们知道目标平台是32位的程序运行在64位的系统上,去访问部分注册表的时候系统自动重定向到win32node节点对应的 ...

最新文章

  1. C++之父元旦专访(8+13个问题,关于C++的学习使用和未来)
  2. mysql安装后配置
  3. python统计分析 --- 1.方差分析、t检验
  4. hihoCoder 1092 : Have Lunch Together
  5. fatal error C1083: 无法打开包括文件:dxtrans.h: No such file or directory
  6. P1403 [AHOI2005]约数研究--100分(python3实现)
  7. 解决Linux下pcieport 0000:00:1c.5问题导致的系统根目录/磁盘空间不足
  8. 【笔试/面试】排列组合与概率计算(三)
  9. docker(4):docker的安装(centos7)和加速
  10. 最基础eacharts图带数字,百分比,tab切换
  11. 网站卡顿,推荐这些免费使用加速工具的网站
  12. 梦想CAD控件关于批注问题
  13. drop index mysql_MySQL修改和删除索引(DROP INDEX)
  14. S3C2440裸机------GPIO
  15. 史上最全互联网运维工作规划!
  16. 视频是新时代的文本,微信也不得不认了!
  17. 软件运行的好好的,突然黑屏啥也进不去了
  18. Python3中pass语句介绍
  19. 第十届上海国际泵阀展多会议活动集中发力,邀您共赴6月泵阀盛会
  20. USB HID读卡器 M1卡读卡器 Mifare 读写器 NFC方案 NFC读写器方案 usb 接口NFC读写器 ISO14444 TypeA 协议读写器 S50/S70 usb读写器 提供Demo

热门文章

  1. Adobe 各软件作用之全家桶
  2. CSS如何动态下拉div盒子、移动div盒子和展开div盒子
  3. 路行助手无法使用_路行助手登录企业微信为什么一直登录不上?
  4. 银行行业基于华为 OceanStor Dorado 18500 V6 高端存储的两地三中心容灾解决方案设计
  5. 比特元BTY入驻区分平台
  6. 【编程练习】拼多多2021笔试真题集
  7. hp服务器显示client,Windows 7上使用HP QC的问题
  8. delphi打开项目提示unable to find resource on dll projects
  9. 正则表达式简介及学习教程下载
  10. Windows C++ VS2015配置Jsoncpp