9A2.升迁2.6.6.210手册
9A2.升迁2.6.6.210手册
build版从201升级210,有以下重点不兼容影响。
- java以11取代8,其编译及启动参数变化
- boot以2.6取代2.4,其webmvc,路径匹配有变
- shardingsphere以5.1取代4.1,其结构更优
- flywave以
__
取代$
机制,以兼容云db功能 - swagger以springdoc取代springfox,以兼容boot2.6
- fastjson2替换fastjson
- 检查wings notable changelog
9A2.1.修改pom.xml
210开始,所有artifactId并入pro.fessional.wings
组内。 以下是parent和普通依赖的修改方法。
<project>
<!-- 把【wings-project】变为【wings】-->
<parent>
<!-- <groupId>pro.fessional</groupId> -->
<!-- <artifactId>wings-project</artifactId> -->
<groupId>pro.fessional</groupId>
<artifactId>wings</artifactId>
<version>2.6.6.210-SNAPSHOT</version>
</parent>
<!-- 把【wings-】从artifactId 变为 groupId的【.wings】 -->
<dependency>
<!-- <groupId>pro.fessional</groupId> -->
<!-- <artifactId>wings-silencer</artifactId> -->
<groupId>pro.fessional.wings</groupId>
<artifactId>silencer</artifactId>
<version>${wings.version}</version>
</dependency>
</project>
9A2.2.升迁到java11
当前使用的java11为openjdk build 11.0.2+9, 推荐以asdf管理java8及java11环境,并在shell中设置JDK8_HOME
和JDK11_HOME
变量。
IDEA或maven启动java程序及TestCast时,需要相应的增加add-opens或add-exports参数
- maven-compiler-plugin - add-exports 编译
- maven-surefire-plugin - add-opens 运行
- IDEA运行TestCase - 自动获取surefire配置
- IDEA运行Java和Boot - 手工设置启动参数模板,
其中启动参数为${wings.java-opens}
内容,不推荐全局变量,如JAVA_TOOL_OPTIONS。 IDEA中需要在Run/Debug Configuration Templates
中分别设置Application
和Spring Boot
参考资料
- What's the difference between --add-exports and --add-opens ...
- How can I specify --add-opens from a project level ...
9A2.3.日志表命名
主要是log表,从dollar变为double underscore风格,trigger后缀变为前缀。
- log表从
table$log
变为table__
- trigger从
table$ai
变为ai__table
操作步骤如下,
- 执行 JournalManager.manageTriggers(table, true) 删除旧trigger
- 执行 JournalManager.checkAndInitDdl(table, cid) 以新配置替换旧配置
- 手工rename journal table
- 执行 JournalManager.publishInsert/Update/Delete(table,true, cid) 生成新trigger
如果数据为mysql8,且符合wings规范,可以采用以下sql测试。
SELECT
TABLE_NAME as TRACE_TBL,
REPLACE(TABLE_NAME,'$log','') as PLAIN_TBL,
CONCAT('ALTER TABLE ',table_name,' RENAME TO ', REPLACE(table_name, '$log','__'), ';;') as RENAME_DDL
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = DATABASE()
AND table_name REGEXP '\\$log';
SELECT
TRIGGER_NAME as OLD_NAME,
REGEXP_REPLACE(TRIGGER_NAME,'^(.+)\\$(.+)$','$2__$1') as NEW_NAME,
CONCAT('DROP TRIGGER IF EXISTS ',TRIGGER_NAME,';;') as DROP_DDL,
REPLACE(CONCAT('CREATE TRIGGER `', REGEXP_REPLACE(TRIGGER_NAME,'^(.+)\\$(.+)$','$2__$1'), '` ',
ACTION_TIMING, ' ', EVENT_MANIPULATION, ' ON `', EVENT_OBJECT_TABLE, '` FOR EACH ROW ',
ACTION_STATEMENT, ';;'),'$log','__') as CREATE_DDL
FROM
INFORMATION_SCHEMA.TRIGGERS
WHERE
EVENT_OBJECT_SCHEMA = database();
--
DELIMITER ;;
-- 复制以上 DROP_DDL, RENAME_DDL, CREATE_DDL,依次执行即可。
9A2.4.lombok移除var
import lombok.var;
find . -type f -name '*.java' | while read -r fl; do
sed -i '' -E 's/import lombok.var;//g' $fl
done
9A2.5.Swagger3.0注解
springdoc全面使用OpenApi/Swagger3.0,因此springfox的Swagger2.0注解需要替换 具体细节参考 https://springdoc.org/#migrating-from-springfox
# 查看 swagger2的注解
find . -type f -name '*.java' | while read -r fl; do
grep 'import io.swagger.annotations' $fl >> /tmp/swagger.log
done
sort /tmp/swagger.log | uniq
rm -f /tmp/swagger.log
# 替换常用标签,自行修改格式偏差引发的编译错误
find . -type f -name '*.java' | while read -r fl; do
sed -i '' -E 's/import io.swagger.annotations.ApiModel;/import io.swagger.v3.oas.annotations.media.Schema;/g' $fl
sed -i '' -E 's/import io.swagger.annotations.ApiModelProperty;/import io.swagger.v3.oas.annotations.media.Schema;/g' $fl
sed -i '' -E 's/import io.swagger.annotations.Api;/import io.swagger.v3.oas.annotations.tags.Tag;/g' $fl
sed -i '' -E 's/import io.swagger.annotations.ApiOperation;/import io.swagger.v3.oas.annotations.Operation;/g' $fl
sed -i '' -E 's/@ApiModel\((.*)\)/@Schema(description = \1)/g' $fl
sed -i '' -E 's/@ApiModelProperty\((.*)\)/@Schema(description = \1)/g' $fl
sed -i '' -E 's/@Api\((.*)\)/@Tag(name = \1)/g' $fl
sed -i '' -E 's/@ApiOperation\((.*)\)/@Operation(summary = \1)/g' $fl
done
9A2.6.升级mysql8.0
wings工程使用jooq,避免复杂sql,仅为sql基本功能,一般无兼容性。可使用mysql shell检查
# 方法一,需要安装 mysql shell
mysqlsh -- util checkForServerUpgrade root@wings-sql-dev5:3306 --target-version=8.0.26 --output-format=JSON
# 方法二,使用mysql-client 8.0
mysqlcheck -u root -p --protocol=tcp -h kite-sql-dev5 --all-databases --check-upgrade
原地(In-Place)升级,即使用5.7的原data目录,直接启动mysql8,对其数据结构自动调整。 简单数据库(单机,单容器)推荐使用,如使用docker启动mysql8.0,检查以下2项,即可自动升级。
- 其data指向mysql5.7的data。
- mysqld中配置upgrade=FORCE
逻辑(logical)升级,指先dump后restore,复杂数据库(云,主从,集群)推荐使用。 直接恢复5.7的FullDump到8.0,需要设置upgrade=FORCE
参数的权限,以完全最后升级, 否则会出现用户能够登录,但Access denied问题,使支撑类用户和功能不好用。
因此建议在有mysql8 client的机器上,分别dump业务用户和业务库,然后restore。
- dump mysql5.7 业务用户,业务库
- restore mysql 8.0 先用户再库
# 生成配置文件
cat >>kite-sql.cnf<< EOF
[client]
protocol=tcp
port=3306
user=trydofor
password=moilioncircle
EOF
# 使用 mysqlpump,以支持更多的选项,全部使用mysql8的client
mysqlpump --defaults-extra-file=kite-sql.cnf -h kite-sql-dev5 \
--all-databases --exclude-databases=information_schema,mysql,performance_schema,sys \
--set-gtid-purged=OFF > mysql-5.7-data.sql
mysqlpump --defaults-extra-file=kite-sql.cnf -h kite-sql-dev5 \
--users --exclude-users=root,%backup \
--exclude-databases=% --set-gtid-purged=OFF > mysql-5.7-user.sql
echo "flush privileges;" >> mysql-5.7-user.sql
# 如果dump是没有忽略innodb_*_status,需要使用--force跳过错误
cat mysql-5.7-user.sql mysql-5.7-data.sql \
| mysql --defaults-extra-file=kite-sql.cnf -h kite-sql-dev
9A2.7.破坏性影响
- wings-project不在依赖devtools,估以此为parent的项目需要自行dependency。
- warlock security的url权限配置,从List变为Map,明确了由宽松到严谨的覆盖关系。
- mirana重写DateLocaling方法名,编译错误时,可依靠参数列表,批量替换方法名。
- Warlock1SchemaManager 重命名方法
- @JsonI18nString变为@AutoI18nString
9A2.8.JooqDao不兼容
原静态引用的方式不建议使用了。
- val t = dao.getTable()
- val a = dao.getAlias()
推荐以dao.getTable及getAlias定义局部变量取代静态全局表 原fetch(Condition)签名,可变为以下形式
- fetch(Table, Condition)
- fetch(t -> Fn.of(t.Id.eq(1L)))
9A2.9.外部Api兼容性
mysql8没有password函数,采用以下组合替换。 SELECT CONCAT('*', UPPER(SHA1(UNHEX(SHA1('trydofor'))))), password('trydofor');
java11中DateTimeFormatter的调整,如 Offset X原来的
XXX
不能代表XXXX
和XXXXX
,以此类推。fastjson2,应该直接以
com.alibaba.fastjson2.
替换com.alibaba.fastjson.
即可。 若对fastjson依赖过于重和复杂,请务必审查工程质量,确认用法安全。
9A2.A.Anthn拼写错误
通过Flywave执行2021-09-18v01
,修复win_user_anthn
拼写错误
a1.执行sql脚本
在未分表且无跟踪表时,可手动执行升级sql。 否则建议使用flywave执行,避免遗漏。
- rename win_user_anthn
- update sys_light_sequence
- update shard table_#
- update trace table$log
- update triggers
a2.替换java文件
全工程的java文件,替换以下字符串
sed -i 's/user_anthn/user_authn/g'
sed -i 's/UserAnthn/UserAuthn/g'
9A2.B.拆分WarlockBond工程
用户权限的默认数据库实现,拆分为warlock-bond工程,
- 不需要此实现的,dependency warlock,
- 否则,dependency warlock-bond
同时增加2020-10-23v01
,以消除flywave-fit警报。
INSERT IGNORE INTO `sys_schema_version`
(`revision`,`commit_id`,`apply_dt`,`comments`,`upto_sql`,`undo_sql`)
VALUES (2020102302,-1,NOW(3),'','','');
9A2.C.拆分CodeGen工程
代码生成工具,分离为独立工程,分别为faceless-codegen和warlock-codegen, 实际使用中,直接依赖warlock-codegen即可,示例maven配置如下
<dependency>
<groupId>pro.fessional.wings</groupId>
<artifactId>warlock-codegen</artifactId>
<scope>test</scope>
</dependency>
9A2.D.多国语功能调整
sys_standard_i18n
中ukey
语义为,约束唯一数据或enum类定位成员
id
类型 -id.
+ idcode
类型 - type +.
+ code- java的enum,则由包名,类名,name构成
修改内容包括,数据记录和codegen代码的多国语功能,
- 替换数据,如 2019-05-21v01-enum-i18n.sql
- 重新生成模板代码,如 StandardLanguage
9A2.E.配置属性的变更
e1.wings-monitor-79.properties
report-keyword
变为notice-keyword