张帆
张帆
Published on 2025-09-16 / 280 Visits
1
2

imom-framework 3.X框架

框架版本

分类

当前版本

SNAPSHOT

3.1.0-SNAPSHOT

RELEASE

20260105.1-release

<dependency>
    <groupId>com.sie.mbm.mom</groupId>
    <artifactId>imom-dependency</artifactId>
    <version>版本</version>
</dependency>

简介

imom-framework 3.X框架是以JDK21、SpringBoot3.5.5为底层环境开发的框架

参考文档

框架javadoc文档:http://doc.imom.chinasie.com:8006/imom-framework/apidocs/index.html

imom 框架由2.X升级至3.X版本升级文档:http://doc.imom.chinasie.com:8006/archives/Y9Qsko03

mybatis-flex参考文档:https://mybatis-flex.com/zh/core/multi-datasource.html

日志使用教程: http://doc.imom.chinasie.com:8006/archives/vYGgOMJe

SQL日志配置:http://doc.imom.chinasie.com:8006/archives/JQlHmjLA

打印使用教程:http://doc.imom.chinasie.com:8006/archives/gJTxjvov

架构

2. 业务功能模块

2.1 framework-common

2.1.1 模块简介

framework-common定义的是基础底层模块,用于通用内容模块的定义,大部分情况下只负责定义不负责实现,达到framework-common轻量化目的。

2.1.2 核心功能说明

包/类

功能

说明

com.sie.mbm.mom.framework.common.annotation

 

通用注解定义

xxx-api、xxx-biz、框架都要用到的通用注解定义

com.sie.mbm.mom.framework.common.constant

通用常量定义

xxx-api、xxx-biz、框架或多个项目通用的常量定义

com.sie.mbm.mom.framework.common.dto

通用DTO定义

xxx-api、xxx-biz、框架或多个项目通用的DTO定义

com.sie.mbm.mom.framework.common.enums

通用枚举定义

xxx-api、xxx-biz、框架或多个项目通用的枚举定义

com.sie.mbm.mom.framework.common.handler

通用系统级别handler,复用性强

目前定义了5个handler接口,为了松耦合,只定义接口未定义实现,实现由core或其他模块实现

● ApplicationBizHandle: 获取业务系统相关信息,默认实现由framework-core提供

● LoginHandle:登录相关操作,默认实现由framework-core提供

● TenantHandle:租户相关操作,默认实现由framework-core提供

● UserHandle:用户相关操作,默认实现由framework-core提供

● UserTokenHandle:用户认证相关操作,默认实现由imom-sdk提供

com.sie.mbm.mom.framework.common.util

通用工具方法

xxx-api、xxx-biz、框架或多个项目通用的工具定义

工具类使用优先级:

hutool工具 > apache.commons工具 > framework.common工具 > 项目自己的工具类

对于其他jar包的工具类除非和对应的业务功能有关,否则不建议使用

ThreadContextHolder

TTL统一管理

ThreadContextHolder目前管理3大类信息:

● UserInfo:用户信息;包含登录信息、租户、时区、多语言等信息

● TransactionInfo:事务信息,包含分布式事务、idme事务、mbm事务

● BusinessInfo:业务信息,提供自动创建和清理上下文功能,内部提供一个Map,业务上当需要用到ThreadLocal时,无需重新定义,可以通过<key, value> 的形式将上下文变量存入BusinessInfo

AssertUtils

 

断言处理

替换现有的DmeAssert,AssertUtils相较于DmeAssert,调整了判断真假的方向,如果为真就不抛异常,因为DmeAssert中的断言相比于标准的assert断言,DmeAssert判断为真就抛异常

ApplicationBizHandle

获取业务系统相关信息

方法isAvailableApplication判断某个微服务是否可用

 

 

2.2 framework-db

2.2.1 模块简介

数据库访问模块,支持dme、mysql、pg数据等,支持切换不同数据库。(为方便介绍,后续除了dme,都称本地数据库)

2.2.2 核心功能说明

2.2.2.1 数据操作

● 框架提供三个基类用于查询不同的数据源数据

基类

说明

DmeMapper

用于查询数据库,支持数据库切换(也支持DME和本地数据库高代码的切换),切换见配置说明

MbmMapper

用于查询华为原子接口

DbMapper

用于直接查询本地数据库,不支持数据库切换,包含数据权限过滤等功能

BaseMapper

mybatis-flex自带Mapper,用于直接查询本地数据库,不支持数据库切换(如果不继承任何框架Mapper,则默认查询的是本地数据库),不包含数据权限过滤等功能(常规业务场景不建议直接继承)

如果业务系统需要支持查询DmeMapper、MbmMapper或DbMapper, 则 @MapperScan 扫描要配置factoryBean = DbTypeMapperFactoryBean.class

例:

@MapperScan(basePackages = {"com.sie.mbm.mom.processcontrol.**.mapper"}, factoryBean = DbTypeMapperFactoryBean.class)

● 框架支持三种方式操作数据

方式

说明

使用基类Mapper内置方法

此部分定义的是通用方法,脚本是动态拼接的,如果Mapper继承DmeMapper,则支持基本操作数据库切换

在Mapper中定义普通接口方法

此部分定义的是高代码方法,Mapper继承DmeMapper,则支持高代码切换

在Mapper中定义default 方法

此部分定义的代码可以组装Mapper中定义的其他方法

例:

@Mapper
public interface PassStationWinRecordMapper extends DmeMapper<PassStationWinRecord> {
 
    /**
     * 高代码查询
     *
     * 方法名为mybatis高代码xml中定义的方法名,或者dme中定义的高代码组件编码
     *
     * @param dto
     * @return 列表
     */
    List<PassStationWinRecord> SiePassStationWinRecordListDtl(@Param("dto") PassStationQueryDTO dto);
 
    /**
     * default组装接口
     *
     * @param queryWrapper 查询条件
     * @return 列表
     */
    default List<PassStationWinRecord> selectListByQueryCall(PassStationQueryDTO queryDTO) {
        List<PassStationWinRecord> all = new ArrayList();
        // 查高代码
        List<PassStationWinRecord> list = SiePassStationWinRecordListDtl(queryDTO);
        if(list != null) {
            add.addAll(list);
         }
        // 查Mapper
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq(queryDTO::getMatchEnd, FlagEnum.TRUE.getEnFlag());
        List<PassStationWinRecord> list2 = selectListByQuery(queryWrapper);
        if(list2 != null) {
            add.addAll(list2);
         }
        return all;
    }
}

 

●  高代码分页,采用pagehelper分页工具

            <dependency>
                <groupId>com.github.pagehelper</groupId>
            <dependency>

PageHelper使用注意事项,当前框架已增加默认异步线程和web线程PageHelper分页线程数据自动清理,但是还无法避免极端情况下或代码不规范导致的同一线程上下文PageHelper残留问题,建议使用框架提供的分页工具

com.sie.mbm.mom.framework.db.util.PageHelpUtil#queryPage

分页使用示例

Page<ApsPlanOrderAssign> page = PageHelpUtil.queryPage(1, 10, () -> apsPlanOrderAssignMapper.selectCustomer());

xml文件存放规范

码目录规范

对于继承DmeMapper的类而言,为了未来切换数据库的不确定性,增加一级数据库名称目录,各数据库命名规范见:DbType

2.2.2.1 事务

直连数据库事务参考

IDME&MBM事务参考

 

2.2.3 配置说明

framework-db基于mybatis-flex进行二次开发,对于连接本地数据库的其他使用参考mybatis-flex官方文档,快速开始 - MyBatis-Flex 官方网站

配置类

配置前缀

配置属性

说明

默认值

DbProperties

 

mybatis-flex

 

dbType

基类操作数据库配置

(类型枚举:DbType)

dme

highDbType

高代码数据库配置

取:dbType

MbmProxyAutoConfiguration

 

hwmbm

参见源码

配置华为原子接口

 

DmeProxyAutoConfiguration

delegate

参见源码

配置idme原子接口

 

 

2.3 framework-core

2.3.1 模块简介

framework-core是由imom-framework框架构建的应用核心模块,必须依赖,定义了web应用核心能力。

2.3.2 核心功能说明

2.3.2.1 WEB全局处理

分类

说明

拦截器

ContextHolderFilter

用户访问信息上下文构建

DistributedTransactionFilter

分布式事务上下文构建

异常处理

GlobalBizExceptionHandler

处理controller抛出的异常

2.3.2.2 Feign全局处理

分类

说明

拦截器

FeignInterceptor

feign传递请求头信息,例如用户、分布式事务

2.3.2.3 多线程

分类

说明

装饰器

DefaultTaskDecorator

会向子线程自动传递由TransmittableThreadLocal

定义的线变量,业务自定义的线程池如有线程变量传递要求可引入此装饰器

线程池

AsyncTaskExecutor

 

框架定义了通用默认线程池,线程池的bean名称为:CommonConstants.DEFAULT_ASYNC_EXECUTOR_BEAN_NAME;

此线程也是@Async默认处理线程池,项目上也可以通过注入AsyncTaskExecutor调用,还可以通过线程池工具类ThreadPoolUtils调用, 关于线程池的配置同Spring官方提供的默认线程池配置一致

工具类

ThreadPoolUtils

通过静态方法调用默认线程池(支持有返回值和没有返回值的操作)

2.3.3 配置说明

配置类

配置前缀

配置属性

说明

默认值

RestTemplate连接配置,目前主要用于华为api调用,idme调用

MomHttpClientConfig

mom.httpclient

defaultMaxPerRoute

默认每个路由的最大连接数

100

 

maxTotal

 

最大连接数

400

 

connectionRequestTimeout

获取连接超时, 等待连接池分配可用连接的耗时

2000

connectTimeout

TCP 连接超时(3次握手)(毫秒)

5000

socketTimeout

默认读取超时时间(毫秒)

30000

timeToLive

连接缓存时间(毫秒)

900 * 1000

 

connectionTimerRepeat

检测连接是否可用的间隔时间(毫秒),也就是定时器扫描连接timeToLive的频率

3000

 

接口查询数据配置(DME的page配置见DmeProxyConfigurationMBM的page配置见MbmPageConfigConstants)

MomPageInfoPropertiesmom.pageinfo配置失效

MomPageInfoProperties

 

mom.pageinfo

 

mbmMaxSelectSize

 

mbm的最大查询记录数

 

10

dmeMaxSelectSize

 

idme的最大查询记录数

 

10

dmeInMaxSelectSize

 

idme的in最大查询记录数

 

10

dmeMaxInsertSize

 

idme的最大新增记录数

 

10

dmeMaxUpdateSize

 

idme的最大修改记录数

 

10

打印Controller接口,主要用于统计使用

MomApiConfig

mom.api

参见源码

参见源码

默认启动时不打印

 

2.4 framework-oss

2.4.1 模块简介

文件存储模块,存储需要持久化的文件,支持本地磁盘存储与对象存储

2.4.2 核心功能说明

文件操作类:FileTemplate,可通过以下代码直接操作文件SDK

@Resource
private FileTemplate template

2.4.3 配置说明

配置类

配置前缀

配置属性

说明

默认值

FileProperties

 

file

bucketName

 

默认每个路由的最大连接数

local

 

LocalFileProperties

 

file.local

enable

是否开启本地存储

true

basePath

存储路径

 

OssProperties

 

file.oss

endpoint

对象存储服务的URL

 

pathStyleAccess

路径样式访问(控制URL访问格式)

true

region

区域

 

accessKey

 

账号

 

secretKey

 

密码

 

maxConnections

最大连接数

100

2.5 framework-cache

2.5.1 模块简介

缓存模块,目前底层采用的是Redis实现

2.5.2 核心功能说明

● 通过代码操作缓存

说明

CacheHelper

业务操作缓存工具类

LogCacheHelper

apilog模块操作日志缓存工具类

● 通过注解操作缓存

已经集成spring-boot-starter-cache,可使用提供的缓存注解,例如:@Cacheable;使用规则见其官方文档

2.5.3 配置说明

● 关于业务的Redis配置,均使用Spring原生的Redis配置类,见RedisProperties

● 对于日志的Redis配置,增加了spring.redis.log.database配置项目,用于配置日志存储的db编号,默认是7

2.6 framework-excel

2.6.1 模块简介

Excel模块,用于实现便捷式Excel导入、导出功能;Excel底层采用easyexcel实现

2.6.2 核心功能说明

略。该模块功能未作调整

2.6.3 配置说明

● 关于业务的Redis配置,均使用Spring原生的Redis配置类,见RedisProperties

对于日志的Redis配置,增加了spring.redis.log.database配置项目,用于配置日志存储的db编号,默认是7

2.7 framework-idempotent

2.7.1 模块简介

提供接口幂等及分布式锁功能,幂等从原理上讲也是一种分布式锁,只是二者的配置不同,使用场景略有不同

2.7.2 核心功能说明

注解

说明

Lock

分布式锁,支持等待,支持tryLock,支持锁失败处理

Idempotent

幂等,主要用于接口上,不支持等待

2.8 framework-sequence

2.8.1 模块简介

序号生成器,默认采用雪花算法

2.8.2 核心功能说明

Spring容器注入Sequence,调用Sequence的nextValue或nextNo方法生成序号

2.8.3 配置说明

配置类

配置前缀

配置属性

说明

默认值

SequenceSnowflakeProperties

mom.xsequence.snowflake

datacenterId

数据中心id

0

workerId

机器id

0

2.9 framework-websocket

2.9.1 模块简介

支持websocket通信,支持连接自动清理、全局自动注入TTL(ThreadContextHolder)

2.9.2 核心功能说明

功能

实现方法

业务消息处理

自定义bean实现接口JsonMessageHandler,支持多个,同一个websocket连接可以发送不同业务功能消息,通过JsonMessageHandler接口的type区分

监听websocket事件

自定义bean实现接口WebSocketLifeCycleListener, 可以完成初始化或清理功能

2.9.3 配置说明

配置类

配置前缀

配置属性

说明

默认值

WebSocketProperties

mom.websocket

path

websocket访问路径

/ws/info

 

heartbeat

 

心跳处理,客户端发起ping消息,服务端响应pong消息

true

 

mapSession

启对session的映射记录, 自动注入用户上下文

true

 

 

2.10 framework-mq

2.10.1 模块介绍

该模块是个异步任务处理模块,基于redis的stream搭建的一个消息队列

开发手册详见文档:http://doc.imom.chinasie.com:8006/archives/D8qfaMzk

2.11 framework-compatible

2.11.1 模块简介

此模块是个兼容模块,用于旧框架升级新框架时,处理兼容性问题的模块,新项目,不能引入此模块

 

3. 框架功能模块

3.1 framework-api

3.1.1 模块简介

framework框架内部远程接口调用定义,用于imom-framework框架子模块使用的远程接口定义,framework-api下的类禁止业务代码调用,只能由框架子模块调用。

3.2 framework-apilog

3.2.1 模块简介

框架层面日志处理,包含Controller、Feign、ResTemplate日志

3.3 framework-swagger

3.3.1 模块简介

业务系统swagger文档api

3.4 framework-license

3.4.1 模块简介

处理微服务授权

升级

imom-framework 3.X框架升级文档


Comment