基框架(WikiFw)重大更新 v1.2.0 发布更新日志
发布日期:2026-06-25
版本升级:全模块 1.1.x → 1.2.0
最低 JDK 版本:JDK 17+(如需 JDK8 兼容请使用 1.0.7 及以下版本)
总体数据
| 项目 | 数量 |
|---|---|
| 变更文件 | 136 个 |
| 新增代码 | +4782 行 |
| 删除代码 | -1587 行 |
| 非合并提交 | 约 35 个 |
一、新增了哪些
1. wiki-datasource — MyBatis 主从读写能力(核心)
| 新增内容 | 说明 |
|---|---|
@Master / @Slave 注解 |
在 Mapper 上显式指定主库/从库 |
DataSourceAspect |
AOP 拦截 Mapper 调用,动态切换数据源 |
DynamicDataSource |
路由数据源,按上下文选择主/从 |
DataSourceContextHolder |
ThreadLocal 保存当前数据源类型 |
DataSourceType 枚举 |
MASTER / SLAVE |
MapperPrimaryScannerConfiguration |
主库 Mapper 独立扫描 |
MapperScannerConfiguration |
从库 Mapper 独立扫描 |
MybatisMapperScanSupport |
从 Environment 解析配置,避免早期绑定问题 |
2. socket/wiki-sse — SSE 模块(全新)
SseEmitterConnectionService— SSE 连接管理SseEmitterCallback— 发布订阅回调EmitterConstant— 常量定义
3. config/ — 配置中心模块重组
config/wiki-config— 自wiki-config迁出config/wiki-nacos-config— Nacos 配置config/wiki-nacos-cloud-config— Nacos Cloud 配置ConfigureRefreshController— 配置刷新接口
4. security/wiki-oauth2 — OAuth2 监控与事件
MetricsConfig— Metrics 监控TokenEventService/AuthorizationEventService— Token 与授权事件AuthEventListener— 认证事件监听MetricOAuth2AuthorizationServiceImpl— 带监控的授权服务CustomOauth2AuthorizationService— 重构后的授权服务接口
5. wiki-util — HTTP 工具
HttpUtils— 新增 HTTP 请求工具类(约 400 行)
6. wiki-security — 用户与机构
IUserDetailsService— 用户详情服务接口- 切换机构相关接口(需业务端实现)
SecurityUserEntity多机构支持重构
7. 实体字段
AbstractUserEntity— 增加员工 IDOrganizationEntity— 增加统一社会信用代码
8. 脚本与文档
wiki.ps1— Windows 构建脚本README.md/README.en.md— 文档大改assets/wiki.png— 项目配图更新
二、优化了哪些
wiki-datasource(重点优化)
-
配置绑定 - 去掉
MybatisConfig上多余的@Configuration,避免重复 Bean、配置读不到 - Mapper 扫描改为Environment+Binder,解决BeanDefinitionRegistryPostProcessor过早读配置、@RefreshScope报错等问题 -
主从切换规则 - 有
@Master→ 主库 - 有@Slave→ 从库 - 无注解 → 默认主库(不再靠类名含slave猜测) - 每次切换打 INFO 日志:数据源切换: MASTER/SLAVE -> xxxMapper.method() -
双 SqlSessionFactory -
primarySessionFactory(主库)+sessionFactory(从库) - 主从可分别配置 Mapper 包和 XML 路径 -MybatisConfig支持master/slave嵌套配置 -
稳定性 -
sqlSessionTemplate明确绑定primarySessionFactory- SqlSessionFactory 初始化失败直接抛异常,避免返回 null
wiki-minio
MinioUtils方法全部改为 静态方法,调用更简单(约 1100 行重构)
wiki-oauth2
- 授权服务拆分,增加 Metrics 与事件体系,便于监控和排查
wiki-cloud
- 新增
LoadBalancerRequestTransformerConfig,负载均衡请求转换
依赖与协议
- MySQL 驱动改为
testscope,避免 GPL 协议冲突 - LICENSE 更新为木兰宽松许可证
三、调整了哪些
| 模块 | 调整内容 |
|---|---|
| 版本 | 全项目 1.1.x → 1.2.0,各模块 pom.xml 同步 |
| 目录 | wiki-config → config/wiki-config;删除历史配置目录 |
| 用户登录 | 支持多机构;登录成功后更新缓存 |
| 代码生成 | FTL 模板包名、mapper.ftl 等引用修正 |
| MyBatis XML | wiki-center 下 mapper XML 路径调整 |
| 全局响应 | GlobalResponseHandler 增加对字符串返回的兼容 |
| Redis / Minio | 自动配置类小调整 |
| 构建脚本 | wiki.sh、bin/install.sh、bin/package.sh、bin/javadoc.sh 更新 |
四、修改 / 修复了哪些
| 问题 | 修复 |
|---|---|
| Mybatis 主从连接 | 主从 Druid 数据源、MybatisDruidDbConfiguration 重构 |
| 配置读不到 | MybatisConfig 重复注册、Mapper 扫描时序问题 |
ClassNotFoundException: com.mysql.cj.jdbc.Driver |
驱动需业务项目自行引入 mysql-connector-j(框架内为 test scope) |
| HTTPS ContentType | HttpsClientUtils 创建错误修复 |
| 代码生成模板 | 引包错误修复 |
| SSE 发布订阅 | 成功/失败回调、消息内容返回等多次迭代 |
| OAuth2 | JwtTokenFilter、AuthorizationServerConfig 等调整 |
五、wiki-datasource 变更一览
新增文件
@Master.java / @Slave.java
DataSourceAspect.java
DynamicDataSource.java / DataSourceContextHolder.java
DataSourceType.java
MapperPrimaryScannerConfiguration.java
MapperScannerConfiguration.java
MybatisMapperScanSupport.java
重点修改
| 文件 | 变更说明 |
|---|---|
MybatisConfig.java |
master/slave 嵌套配置,去掉 @Configuration |
MybatisAutoConfiguration.java |
@Bean 注册 Mapper 扫描 |
MybatisConfiguration.java |
双 SqlSessionFactory |
MybatisDruidDbConfiguration.java |
主从 Druid 数据源 |
pom.xml |
mysql-connector-j 改为 test scope |
主从切换逻辑
@Master 注解存在 → MASTER
@Slave 注解存在 → SLAVE
两者都没有 → MASTER(默认)
数据源切换日志
每次 Mapper 方法调用前输出 INFO 日志:
数据源切换: MASTER -> com.xxx.mapper.UserMapper.selectById()
数据源切换: SLAVE -> com.xxx.mapper.UserMapper.selectList()
六、业务侧配置与使用
application.yml 配置示例
spring:
datasource:
# 公共 Mapper 扫描包(主从共用)
mybatis-mapper:
- com.framewiki.example.mapper
# 公共 Mapper XML 路径
mybatis-mapper-xml:
- /mybatis/**/*.xml
# Druid 连接池参数(建议配置)
max-active: 20
initial-size: 5
min-idle: 5
filters: stat,wall
master:
url: jdbc:mysql://host:3306/db?characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
slave:
url: jdbc:mysql://host:3306/db?characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
Mapper 注解用法
// 默认主库,无需加注解
public interface RmsUserMapper {
RmsUser selectById(Long id);
}
// 显式走从库
public interface RmsUserQueryMapper {
@Slave
List<RmsUser> selectList();
}
// 从库 Mapper 上标了 @Slave,但某个写操作强制走主库
@Slave
public interface RmsUserSlaveMapper {
@Master
int updateStatus(Long id);
}
启用方式
在启动类上添加:
@EnableAutoMybatis
@SpringBootApplication
public class Application { }
MySQL 驱动依赖(必须自行引入)
wiki-datasource 模块内 mysql-connector-j 为 test scope,业务项目需自行添加:
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
若未引入,会出现
ClassNotFoundException: com.mysql.cj.jdbc.Driver,这与配置是否读取成功无关。
七、模块变更文件统计(按目录)
| 目录/模块 | 主要变更 |
|---|---|
datasource/wiki-datasource |
主从数据源全套能力 + 测试 |
socket/wiki-sse |
全新 SSE 模块 |
config/ |
配置中心重组 |
security/wiki-oauth2 |
OAuth2 监控与事件 |
security/wiki-security |
多机构用户登录 |
wiki-util |
HttpUtils |
wiki-minio |
MinioUtils 静态化 |
wiki-entity |
用户/机构字段扩展 |
wiki-center |
代码生成模板、MyBatis XML |
wiki-cloud |
负载均衡配置 |
全模块 pom.xml |
版本升至 1.2.0 |
LICENSE |
协议更新 |
README / 脚本 |
文档与构建脚本更新 |