puzhibing
2023-06-13 11b4c2cf16ff93e4e4955f88db3ae9c28d6f7782
新增模块和注册中
2 文件已复制
6 文件已重命名
81个文件已删除
1个文件已修改
313个文件已添加
35588 ■■■■■ 已修改文件
cloud-server-account/src/main/java/com/dsh/account/advice/ControllerException.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/DateTimeHelper.java 1769 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/DateUtil.java 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/DoubleUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/EmojiUtil.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/HeaderAuthUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/JsonUtil.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/LocalDateTimeUtils.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/MessageUtils.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/RedisUtil.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/ResultUtil.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/StrUtils.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/StringUtil.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/StudyTimeUtil.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/TokenUtil.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/Auth.java 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/Base64Utils.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/BaseUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/DES.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/LoginUtil.java 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/Md5Util.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/SignUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/advice/ControllerException.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/DateTimeHelper.java 1769 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/DateUtil.java 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/DoubleUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/EmojiUtil.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/HeaderAuthUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/JsonUtil.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/MessageUtils.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/RedisUtil.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/ResultUtil.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/StrUtils.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/StringUtil.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/StudyTimeUtil.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/TokenUtil.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/Base64Utils.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/BaseUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/DES.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/Md5Util.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/SignUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/advice/ControllerException.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/DateTimeHelper.java 1769 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/DateUtil.java 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/DoubleUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/EmojiUtil.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/HeaderAuthUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/JsonUtil.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/LocalDateTimeUtils.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/MessageUtils.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/RedisUtil.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/ResultUtil.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/StrUtils.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/StringUtil.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/StudyTimeUtil.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/TokenUtil.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/Auth.java 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/Base64Utils.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/BaseUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/DES.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/LoginUtil.java 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/Md5Util.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/SignUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/advice/ControllerException.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/DateTimeHelper.java 1769 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/DateUtil.java 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/DoubleUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/EmojiUtil.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/HeaderAuthUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/JsonUtil.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/MessageUtils.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/RedisUtil.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/ResultUtil.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/StrUtils.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/StringUtil.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/StudyTimeUtil.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/TokenUtil.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/akeylogin/Base64Utils.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/akeylogin/BaseUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/akeylogin/DES.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/akeylogin/Md5Util.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/course/util/akeylogin/SignUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/advice/ControllerException.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/DateTimeHelper.java 1769 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/DateUtil.java 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/DoubleUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/EmojiUtil.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/HeaderAuthUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/JsonUtil.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/LocalDateTimeUtils.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/MessageUtils.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/RedisUtil.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/ResultUtil.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/StrUtils.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/StringUtil.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/StudyTimeUtil.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/TokenUtil.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/Auth.java 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/Base64Utils.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/BaseUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/DES.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/LoginUtil.java 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/Md5Util.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/SignUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/advice/ControllerException.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/DateTimeHelper.java 1769 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/DateUtil.java 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/DoubleUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/EmojiUtil.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/HeaderAuthUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/JsonUtil.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/MessageUtils.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/RedisUtil.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/ResultUtil.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/StrUtils.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/StringUtil.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/StudyTimeUtil.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/TokenUtil.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/akeylogin/Base64Utils.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/akeylogin/BaseUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/akeylogin/DES.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/akeylogin/Md5Util.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/course/util/akeylogin/SignUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/pom.xml 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/GatewayApplication.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/AuthService.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/AuthenticationKit.java 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/HMACSHA1.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/HashKit.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/ResultUtil.java 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/UrlEncoderUtils.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/config/RedisConfig.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/config/SwaggerResourceController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/PermissionsFilter.java 403 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/QueryParamsUtil.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/RequestParamFilter.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/handler/AppTypeContextHolder.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/model/HeaderParams.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/util/RedisUtil.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/resources/bootstrap.properties 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/resources/logback-spring.xml 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/resources/rebel.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/resources/redis.properties 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/resources/script/buildZip.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/src/main/resources/script/start_bash.sh 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/AgreementController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/CancleOrderController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/CarController.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/CarServiceController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/CityController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/DriverController.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/HotAddressController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/ImgController.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/NoticeController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/OpenCityController.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/PhoneController.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/ProblemController.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/PushOrderController.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/SensitiveWordsController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/ServerCarModelController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/SysIntegralController.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/SysRedPacketRecordController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/SysUserController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/SystemNoticeController.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/SystemPriceController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/controller/VersionManagementController.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/pom.xml 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/OtherApplication.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/config/JsonLongSerializer.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/config/MessageLocalConfig.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/config/MyLocaleResolver.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/config/RedisConfig.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/config/SwaggerConfig.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/advice/ControllerException.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/DateTimeHelper.java 1769 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/DateUtil.java 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/DoubleUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/EmojiUtil.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/HeaderAuthUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/JsonUtil.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/LocalDateTimeUtils.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/MessageUtils.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/ResultUtil.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/StrUtils.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/StringUtil.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/StudyTimeUtil.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/TokenUtil.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/Auth.java 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/Base64Utils.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/BaseUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/DES.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/LoginUtil.java 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/Md5Util.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/SignUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/bootstrap.properties 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/logback-spring.xml 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/redis.properties 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-parent @ d2590c 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/LICENSE 316 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/NOTICE 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/bin/derby.log 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/bin/logs/access_log.2023-06-13.log 514 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/bin/shutdown.cmd 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/bin/shutdown.sh 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/bin/startup.cmd 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/bin/startup.sh 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/conf/1.4.0-ipv6_support-update.sql 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/conf/application.properties 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/conf/application.properties.example 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/conf/cluster.conf.example 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/conf/nacos-logback.xml 778 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/conf/nacos-mysql.sql 221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/conf/schema.sql 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/README_DO_NOT_TOUCH_FILES.txt 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/db.lck 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/log/README_DO_NOT_TOUCH_FILES.txt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/log/log.ctrl 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/log/log1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/log/logmirror.ctrl 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/README_DO_NOT_TOUCH_FILES.txt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c10.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c101.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c111.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c121.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c130.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c141.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c150.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c161.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c171.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c180.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c191.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c1a1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c1b1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c1c0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c1d1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c1e0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c1f1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c20.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c200.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c211.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c221.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c230.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c241.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c251.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c260.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c271.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c281.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c290.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c2a1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c2b1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c2c1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c2d0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c2e1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c2f0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c300.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c31.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c311.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c321.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c331.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c340.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c351.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c361.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c371.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c380.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c391.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c3a1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c3b1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c3c0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c3d1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c3e1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c3f1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c400.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c41.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c411.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c421.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c430.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c441.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c451.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c461.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c470.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c481.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c490.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c4a1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c4b1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c4c1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c4d1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c4e1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c4f0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c501.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c51.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c511.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c521.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c531.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c540.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c551.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c561.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c570.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c581.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c591.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c5a0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c5b1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c5c1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c5d0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c5e1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c5f1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c60.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c600.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c611.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c621.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c630.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c641.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c651.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c660.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c671.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c681.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c691.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c6a0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c6b1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c6c1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c6d0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c6e1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c6f1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c700.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c71.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c711.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c721.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c731.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c740.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c751.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c760.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c771.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c780.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c791.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c81.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/c90.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/ca1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/cb1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/cc0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/cd1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/ce1.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/seg0/cf0.dat 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/derby-data/service.properties 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/loader/limitRule 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/log/000003.log 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/log/CURRENT 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/log/IDENTITY 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/log/LOCK 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/log/LOG 1354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/log/MANIFEST-000004 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/log/OPTIONS-000006 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/log/OPTIONS-000008 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/meta-data/raft_meta 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_1/__raft_snapshot_meta 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_1/instance_metadata.zip 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/log/000003.log 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/log/CURRENT 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/log/IDENTITY 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/log/LOCK 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/log/LOG 1354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/log/MANIFEST-000004 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/log/OPTIONS-000006 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/log/OPTIONS-000008 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/meta-data/raft_meta 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_1/__raft_snapshot_meta 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_1/persistent_instance.zip 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/log/000003.log 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/log/CURRENT 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/log/IDENTITY 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/log/LOCK 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/log/LOG 1354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/log/MANIFEST-000004 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/log/OPTIONS-000006 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/log/OPTIONS-000008 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/meta-data/raft_meta 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/snapshot/snapshot_1/__raft_snapshot_meta 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/protocol/raft/naming_service_metadata/snapshot/snapshot_1/service_metadata.zip 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/CONFIG_PUSH_COUNT 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/CONFIG_PUSH_FAIL 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/CONFIG_PUSH_SUCCESS 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/ClusterConfigChangeNotify 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/ConfigListen 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/ConfigPublish 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/ConfigQuery 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/ConfigRemove 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/HealthCheck 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_DISTRO_SYNC 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_DISTRO_SYNC_FAIL 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_DISTRO_SYNC_SUCCESS 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_DISTRO_VERIFY 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_DISTRO_VERIFY_FAIL 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_DISTRO_VERIFY_SUCCESS 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_RPC_PUSH 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_RPC_PUSH_FAIL 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_RPC_PUSH_SUCCESS 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_UDP_PUSH 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_UDP_PUSH_FAIL 补丁 | 查看 | 原始文档 | blame | 历史
nacos/data/tps/NAMING_UDP_PUSH_SUCCESS 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/advice/ControllerException.java
New file
@@ -0,0 +1,45 @@
package com.dsh.account.advice;
import cn.mb.cloud.common.core.constant.enums.ErrorCodeConstants;
import cn.mb.cloud.common.core.exception.BusinessException;
import cn.mb.cloud.common.core.util.ResponseData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestControllerAdvice
public class ControllerException {
    @ExceptionHandler(BusinessException.class)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public ResponseData bussiness(BusinessException e) {
        log.error("业务异常 message= " + e.getMessage() + " code= " + e.getErrorCode(), e);
        return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).
                msg(e.getMessage()).build();
    }
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public ResponseData runtimeException(RuntimeException e) {
        log.error("运行时异常信息" + e.getMessage(), e);
        return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).msg(e.getMessage()).build();
    }
    /**
     * 全局异常.
     *
     * @param e the e
     * @return R
     */
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public ResponseData exception(Exception e) {
        log.error("全局异常信息" + e.getMessage(), e);
        return ResponseData.fail();
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/DateTimeHelper.java
New file
@@ -0,0 +1,1769 @@
package com.dsh.account.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
/**
 * 日期时间类型的工具类,提供对日期和时间基于毫秒及以上精度的格式化方法、
 * 运算方法、比较方法等。注意:大部分对日期对象(java.util.Date)操作的方法,
 * 不会修改原日期对象,而以一个新的日期对象返回。
 * <p>
 * <p>
 * <p><pre><b>
 * 历史更新记录:</b>
 * 2004-6-17  创建此类型
 * 2005-9-30  修改方法:parseToDate(),去掉了对年份从(1970-9999)这个范围的限制。抛出异常:IllegalArgumentException(),JThinkRuntimeException()
 * 2005-10-2  修改方法: 其它方法,抛出异常:IllegalArgumentException(),JThinkRuntimeException()
 * 2005-10-2  增加方法: addTime(Date d, double times, int type)
 * 2005-10-2  增加方法: addSystemTime()
 * 2005-10-2  修改方法, 对于所有以日期对象类型java.util.Date为参数的方法,如果日期为null,都抛出异常:IllegalArgumentException()
 * <p>
 * </pre></p>
 */
public final class DateTimeHelper {
    /**
     * 把时间格式化成如:2002-08-03 8:26:30.400 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssSa_12 = "yyyy-MM-dd KK:mm:ss.S a";
    /**
     * 把时间格式化成如:2002-08-03 8:26:16 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssa_12 = "yyyy-MM-dd KK:mm:ss a";
    /**
     * 把时间格式化成如:2002-08-03 8:26 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmma_12 = "yyyy-MM-dd KK:mm a";
    /**
     * 把时间格式化成如:2002-08-03 8 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHa_12 = "yyyy-MM-dd KK a";
    /**
     * 把时间格式化成如:2002-07-05 am 格式的字符串
     */
    public final static String FMT_yyyyMMdda_12 = "yyyy-MM-dd a";
    /**
     * 把时间格式化成如:2002-08-03 08:26:30.400 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssS = "yyyy-MM-dd HH:mm:ss.S";
    /**
     * 把时间格式化成如:2002-08-03 08:26:16 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";
    /**
     * 把时间格式化成如:2002-08-03 08:26 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmm = "yyyy-MM-dd HH:mm";
    /**
     * 把时间格式化成如:2002-08-03 08 格式的字符串
     */
    public final static String FMT_yyyyMMddHH = "yyyy-MM-dd HH";
    /**
     * 把时间格式化成如:2002-07-05 格式的字符串
     */
    public final static String FMT_yyyyMMdd = "yyyy-MM-dd";
    /**
     * 把时间格式化成如:2002-07 格式的字符串
     */
    public final static String FMT_yyyyMM = "yyyy-MM";
    /**
     * 把时间格式化成如:07.19 格式的字符串
     */
    public final static String FMT_MMdd = "MM.dd";
    /**
     * 把时间格式化成如:12:08 PM(下午) 格式的字符串
     */
    public final static String FMT_HHmmA_12 = "KK:mm a";
    /**
     * 把时间格式化成如:0:55 AM上午, CST 格式的字符串
     */
    public final static String FMT_HHmmAz_12 = "KK:mm a,z";
    /**
     * 把时间格式化成如:0:56 AM上午, 中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmAzzzz_12 = "KK:mm a,zzzz";
    /**
     * 把时间格式化成如:12:08:23 am 格式的字符串
     */
    public final static String FMT_HHmmssA_12 = "KK:mm:ss a";
    /**
     * 把时间格式化成如:0:55:33 AM上午, CST 格式的字符串
     */
    public final static String FMT_HHmmssAz_12 = "KK:mm:ss a,z";
    /**
     * 把时间格式化成如:0:56:23 AM上午, 中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmssAzzzz_12 = "KK:mm:ss a,zzzz";
    /**
     * 把时间格式化成如:22:04:45 格式的字符串
     */
    public final static String FMT_HHmmss = "HH:mm:ss";
    /**
     * 把时间格式化成如:22:04:45.824 格式的字符串
     */
    public final static String FMT_HHmmssS = "HH:mm:ss.S";
    /**
     * 把时间格式化成如:22:04 格式的字符串
     */
    public final static String FMT_HHmm = "HH:mm";
    /**
     * 把时间格式化成如:22:04,CST 格式的字符串
     */
    public final static String FMT_HHmmz = "HH:mm,z";
    /**
     * 把时间格式化成如:22:04,中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmzzzz = "HH:mm,zzzz";
    /**
     * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串
     */
    public final static String FMT_WWMMDDYY_EN = "EEE,MMM d,''yyyy";
    /**
     * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串
     */
    public final static String FMT_WWMMDDYY_CN = "EEE,yyyy年MMMd号";
    /**
     * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串
     */
    public final static String FMT_MMDDYY_EN = "MMM d,''yyyy";
    /**
     * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串
     */
    public final static String FMT_MMDDYY_CN = "yyyy年MMMd号";
    /**
     * 把时间格式化成如:星期几 格式的字符串,即可获得该日这个时间是星期几
     */
    public final static String FMT_WW = "EEE";
    public final static String FMT_ddMMyyyy = "dd-MM-yyyy";
    /**
     * 把时间格式成日期数字,如:20120606
     */
    public final static String FMT_yyyyMMdd_noseparator = "yyyyMMdd";
    public final static String FMT_yyyyMMdd_Zh = "yyyy年MM月dd日";
    public final static String FMT_yyyyMMddHH_noseparator = "yyyyMMddHH";
    /**
     * 把时间格式成日期数字,如:20120606121212
     */
    public final static String FMT_yyyyMMddhhmmss_noseparator = "yyyyMMddHHmmss";
    /**
     * 把时间格式化成如:2002.07.05 格式的字符串
     */
    public final static String FMT_yyyyxMMxdd = "yyyy.MM.dd";
    /**
     * 常用的格式化时间的格式组,用于本类中格式化字符串成时间型
     */
    private final static String[] formatStr = {
            FMT_ddMMyyyy,
            FMT_yyyyMMddHHmmssS,
            FMT_yyyyMMddHHmmss,
            FMT_yyyyMMddHHmm,
            FMT_yyyyMMddHH,
            FMT_yyyyMMdd,
            FMT_HHmmss,
            FMT_HHmmssS,
            FMT_HHmm,
            FMT_HHmmz,
            FMT_HHmmzzzz,
            FMT_yyyyMMddHHmmssSa_12,
            FMT_yyyyMMddHHmmssa_12,
            FMT_yyyyMMddHHmma_12,
            FMT_yyyyMMddHHa_12,
            FMT_yyyyMMdda_12,
            FMT_HHmmA_12,
            FMT_HHmmAz_12,
            FMT_HHmmAzzzz_12,
            FMT_HHmmssA_12,
            FMT_HHmmssAz_12,
            FMT_HHmmssAzzzz_12
    };
    /**
     * 私有化构造器,使得不能产生该类对象,类中所有的方法均为静态方法
     */
    private DateTimeHelper() {
    }
    /**
     * 根据给出的Date值和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param date
     * @param formatStr
     * @return 如果为null,返回字符串""
     */
    public static String formatDateTimetoString(Date date, String formatStr) {
        String reStr = "";
        if (date == null || formatStr == null || formatStr.trim().length() < 1) {
            return reStr;
        }
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern(formatStr);
        reStr = sdf.format(date);
        return reStr;
    }
    public static Date getSystemDate(String fmtstr) {
        try {
            return parseToDate(formatDateTimetoString(getSystemDate(), fmtstr));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return getSystemDate();
        }
    }
    /**
     * 根据给出的Date值和格式串采用给定的国家所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param date      日期对象
     * @param formatStr 日期格式
     * @return 如果为null,返回字符串""
     */
    public static String formatDateTimetoString(Date date, String formatStr, Locale locale) {
        String reStr = "";
        if (date == null || formatStr == null || locale == null || formatStr.trim().length() < 1) {
            return reStr;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale);
        reStr = sdf.format(date);
        return reStr;
    }
    /**
     * 根据给出的Date值字符串和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param dateStr   日期串
     * @param formatStr 日期格式
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateStr, String formatStr) throws Exception {
        String dStr = "";
        if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0) {
            dStr = formatDateTimetoString(parseToDate(dateStr), formatStr);
        }
        return dStr;
    }
    /**
     * 根据给出的Date值字符串和格式串采用指定国家的风格来格式化时间,并返回相应的字符串
     *
     * @param dateStr   日期串
     * @param formatStr 日期格式
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateStr, String formatStr, Locale locale) throws Exception {
        String dStr = "";
        if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0 && locale != null) {
            dStr = formatDateTimetoString(parseToDate(dateStr, locale), formatStr, locale);
        }
        return dStr;
    }
    /**
     * 按指定的格式和操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @param formatStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, String formatStr) throws Exception {
        if (dateTimeStr == null || formatStr == null || dateTimeStr.trim().length() < 1 || formatStr.trim().length() < 1) {
            throw new IllegalArgumentException("参数dateTimeStr、formatStr不能是null或空格串!");
        }
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
        try {
            return sdf.parse(dateTimeStr);
        } catch (ParseException e) {
            throw new Exception(e);
        }
    }
    /**
     * 按指定的格式和指定国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @param formatStr
     * @param locale
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, String formatStr, Locale locale) throws Exception {
        if (dateTimeStr != null && formatStr != null && locale != null && dateTimeStr.trim().length() > 0 && formatStr.trim().length() > 0) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
                throw new Exception(e);
            }
        } else {
            throw new IllegalArgumentException("参数dateTimeStr、formatStr、locale不能是null或空格串!");
        }
    }
    /**
     * 按操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr) throws Exception {
        if (dateTimeStr == null || dateTimeStr.trim().length() < 1) {
            throw new IllegalArgumentException("参数dateTimeSt不能是null或空格串!");
        }
        int formatStrLength = formatStr.length;
        int i = 0;
        for (i = 0; i < formatStrLength; i++) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i]);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
            }
        }
        throw new Exception("日期格式不正确!");
    }
    /**
     * 根据给出的年月和日返回一个日期型的对象
     *
     * @param year  年
     * @param month 月 ,1到12
     * @param day   日 ,1到31
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(int year, int month, int day) throws Exception {
        if (month < 1 || month > 12 || day < 1 || day > 31) {
            throw new IllegalArgumentException("参数不正确!");
        }
        String yearStr = String.valueOf(year);
        String monthStr = String.valueOf(month);
        String dayStr = String.valueOf(day);
        return parseToDate(yearStr + "-" + monthStr + "-" + dayStr);
    }
    /**
     * 根据给出的年月日、时分秒、返回一个对应的Date型对象
     *
     * @param year  年
     * @param month 月 ,1到12
     * @param day   日 ,1到31
     * @param h     小时,从0到23
     * @param m     分,从0到60
     * @param s     秒,从0到60
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(int year, int month, int day, int h, int m, int s) throws Exception {
        if (month < 1 || month > 12 || day < 1 || day > 31 || h < 0 || h > 23 || m < 0 || m > 60 || s < 0 || s > 60) {
            throw new IllegalArgumentException("参数不正确!");
        }
        String yearStr = String.valueOf(year);
        String monthStr = String.valueOf(month);
        String dayStr = String.valueOf(day);
        String hStr = String.valueOf(h);
        String mStr = String.valueOf(m);
        String sStr = String.valueOf(s);
        return parseToDate(yearStr + "-" + monthStr + "-" + dayStr + " " + hStr + ":" + mStr + ":" + sStr);
    }
    /**
     * 按指定国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, Locale locale) throws Exception {
        if (dateTimeStr == null || dateTimeStr.trim().length() < 1 || locale == null) {
            throw new IllegalArgumentException("参数dateTimeSt、locale不能是null或空格串!");
        }
        int formatStrLength = formatStr.length;
        int i = 0;
        for (i = 0; i < formatStrLength; i++) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i], locale);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
            }
        }
        throw new Exception("日期格式不正确!");
    }
    /**
     * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateTimeStr) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss);
    }
    /**
     * 将给定的日期时间字符串按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateTimeStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss, locale);
    }
    /**
     * 将给定的日期时间按操作系统默认的国家内格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTime
     * @return 如果为null,返回""
     */
    public static String formatDateTimetoString(Date dateTime) {
        return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss);
    }
    /**
     * 将给定的日期时间按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTime
     * @param locale
     * @return 如果为null,返回""
     */
    public static String formatDateTimetoString(Date dateTime, Locale locale) {
        return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss, locale);
    }
    /**
     * 将给定的日期字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param date
     * @param dateStr 日期串
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDatetoString(Date date, String dateStr) throws Exception {
        return formatDateTimetoString(dateStr, FMT_yyyyMMdd);
    }
    /**
     * 将给定的日期字符串按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param dateStr 日期串
     * @param locale  Locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDatetoString(String dateStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateStr, FMT_yyyyMMdd, locale);
    }
    /**
     * 将给定的日期按指定操作系统默认国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param d 日期对象
     * @return 如果为null,返回""
     */
    public static String formatDatetoString(Date d) {
        return formatDateTimetoString(d, FMT_yyyyMMdd);
    }
    /**
     * 将给定的日期按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param d      日期对象
     * @param locale Locale
     * @return 如果为null,返回""
     */
    public static String formatDatetoString(Date d, Locale locale) {
        return formatDateTimetoString(d, FMT_yyyyMMdd, locale);
    }
    /**
     * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatTimetoString(String dateTimeStr) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss);
    }
    /**
     * 将给定的日期时间字符串按指定国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatTimetoString(String dateTimeStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale);
    }
    /**
     * 将给定的日期时间按指定操作系统默认国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     */
    public static String formatTimetoString(Date dateTimeStr) {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss);
    }
    /**
     * 将给定的日期时间按指定国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     */
    public static String formatTimetoString(Date dateTimeStr, Locale locale) {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale);
    }
    /**
     * 返回一个时间的年份整数
     *
     * @param d
     * @return 年份
     */
    public static int getYearOfDate(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.YEAR);
    }
    /**
     * 返回一个时间的月份整数
     *
     * @param d
     * @return 月份
     */
    public static int getMonthOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.MONTH) + 1;
    }
    /**
     * 返回一个时间的天份整数,是这个月的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfMonth(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }
    /**
     * 返回一个时间的天份整数,是这个年份的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_YEAR);
    }
    /**
     * 返回一个时间的天份整数,是这个周的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfWeek(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_WEEK) - 1;
    }
    /**
     * 返回一个时间的周的整数,是这个月的第几周
     *
     * @param d
     * @return 周
     */
    public static int getWeekOfMonth(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.WEEK_OF_MONTH);
    }
    /**
     * 返回一个时间的周的整数,是这个年份的第几周
     *
     * @param d
     * @return 周
     */
    public static int getWeekOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.WEEK_OF_YEAR);
    }
    /**
     * 返回该时间所对应的在一天中的小时数的整数,如当前(Date now)是下午3点,返回为15
     *
     * @param d
     * @return 小时
     */
    public static int getHoursOfDay(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int hours = calendar.get(Calendar.HOUR_OF_DAY);
        return hours;
    }
    /**
     * 返回该时间所对应的在一天中的小时数的整数(采用12小时制),如当前(Date now)是下午3点,返回为3
     *
     * @param d
     * @return 小时
     */
    public static int getHoursOfDay12(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int hours = calendar.get(Calendar.HOUR);
        return hours;
    }
    /**
     * 返回该时间所对应的分钟数中的整数,如now是15点14分,则返回14
     *
     * @param d
     * @return 分钟
     */
    public static int getMinutesOfHour(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int minutes = calendar.get(Calendar.MINUTE);
        return minutes;
    }
    /**
     * 返回该时间所对应的秒数中的整数,如now是15点14分34秒,则返回34
     *
     * @param d
     * @return 秒
     */
    public static int getSecondsOfMinute(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int seconds = calendar.get(Calendar.SECOND);
        return seconds;
    }
    /**
     * 返回该时间所对应的毫秒数中的整数,如now是15点14分34秒470毫秒,则返回470
     *
     * @param d
     * @return 毫秒
     */
    public static int getMillisecondsOfSecond(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int millisecond = calendar.get(Calendar.MILLISECOND);
        return millisecond;
    }
    /**
     * 返回该时间相对于1970年1月1日开始计算的对应的毫秒数
     *
     * @param d
     * @return 毫秒数
     */
    public static long getTime(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        return d.getTime();
    }
    /**
     * 比较两个时间的先后顺序。
     * 如果时间d1在d2之前,返回1,
     * 如果时间d1在d2之后,返回-1,
     * 如果二者相等,返回0
     *
     * @param d1
     * @param d2
     * @return 如果时间d1在d2之前,返回1,
     * 如果时间d1在d2之后,返回-1,
     * 如果二者相等,返回0
     */
    public static int compareTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long dI1 = d1.getTime();
        long dI2 = d2.getTime();
        if (dI1 > dI2) {
            return -1;
        } else if (dI1 < dI2) {
            return 1;
        } else {
            return 0;
        }
    }
    /**
     * 返回两个日期之间的毫秒数的差距
     *
     * @param d1
     * @param d2
     * @return 二者至1970年1.1后的毫秒数的差值
     */
    public static long getMillisecondsOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long dI1 = d1.getTime();
        long dI2 = d2.getTime();
        return (dI1 - dI2);
    }
    /**
     * 获得两个日期之间相差的秒数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的秒数
     */
    public static double getSecondsOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long i = getMillisecondsOfTwoDate(d1, d2);
        return (double) i / 1000;
    }
    /**
     * 获得两个日期之间相差的分钟数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的分钟数
     */
    public static double getMinutesOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的小时数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的小时数
     */
    public static double getHoursOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 60 / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的天数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的天数
     */
    public static double getDaysOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 24 / 60 / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的天数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的天数
     */
    public static Long daysOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return millions / 24 / 60 / 60 / 1000;
    }
    /**
     * 把给定的时间加上指定的时间值,可以为负。
     *
     * @param d     日期对象
     * @param times 时间值
     * @param type  类型,
     *              Calendar.MILLISECOND,毫秒<BR>
     *              Calendar.SECOND,秒<BR>
     *              Calendar.MINUTE,分钟<BR>
     *              Calendar.HOUR,小时<BR>
     *              Calendar.DATE,日<BR>
     * @return 如果d为null,返回null
     */
    public static Date addTime(Date d, double times, int type) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        long qv = 1;
        switch (type) {
            case Calendar.MILLISECOND:
                qv = 1;
                break;
            case Calendar.SECOND:
                qv = 1000;
                break;
            case Calendar.MINUTE:
                qv = 1000 * 60;
                break;
            case Calendar.HOUR:
                qv = 1000 * 60 * 60;
                break;
            case Calendar.DATE:
                qv = 1000 * 60 * 60 * 24;
                break;
            default:
                throw new RuntimeException("时间类型不正确!type=" + type);
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        long milliseconds = (long) Math.round(Math.abs(times) * qv);
        if (times > 0) {
            for (; milliseconds > 0; milliseconds -= 2147483647) {
                if (milliseconds > 2147483647) {
                    calendar.add(Calendar.MILLISECOND, 2147483647);
                } else {
                    calendar.add(Calendar.MILLISECOND, (int) milliseconds);
                }
            }
        } else {
            for (; milliseconds > 0; milliseconds -= 2147483647) {
                if (milliseconds > 2147483647) {
                    calendar.add(Calendar.MILLISECOND, -2147483647);
                } else {
                    calendar.add(Calendar.MILLISECOND, -(int) milliseconds);
                }
            }
        }
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的年份,可以为负, 返回新的被加上了年份的日期对象,不影响参数日期对象值
     * Given a certain time and a specified year, which can be negative, returns a new date object with the added year, without affecting the value of the original date object.
     * @param d
     * @param years
     * @return 日期对象
     */
    public static Date addYears(Date d, int years) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.YEAR, years);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的月份,可以为负
     * Adding the specified number of month to the given time is possible, including negative values.
     * @param d
     * @param months
     * @return 日期对象
     */
    public static Date addMonths(Date d, int months) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MONTH, months);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的天数,可以为负
     * Adding the specified number of day to the given time is possible, including negative values.
     * @param d    日期对象
     * @param days
     * @return 日期对象
     */
    public static Date addDays(Date d, int days) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.HOUR, days * 24);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的小时,可以为负
     * Adding the specified number of hour to the given time is possible, including negative values.
     * @param d     日期对象
     * @param hours
     * @return 日期对象
     */
    public static Date addHours(Date d, int hours) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.HOUR, hours);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的分钟,可以为负
     * Adding the specified number of minute to the given time is possible, including negative values.
     * @param d
     * @param minutes
     * @return 日期对象
     */
    public static Date addMinutes(Date d, int minutes) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MINUTE, minutes);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的秒数,可以为负
     * Adding the specified number of seconds to the given time is possible, including negative values.
     * @param d
     * @param seconds
     * @return 日期对象
     */
    public static Date addSeconds(Date d, int seconds) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.SECOND, seconds);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的毫秒数,可以为负
     * Adding the specified number of milliseconds to the given time can result in a negative value.
     * @param d
     * @param milliseconds
     * @return 日期对象
     */
    public static Date addMilliseconds(Date d, int milliseconds) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MILLISECOND, milliseconds);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的年份是新的给定的年份
     * Setting the year of a date object to a new given year.
     * @param d    需要设定的日期对象
     * @param year 新的年份
     * @return 日期对象
     */
    public static Date setYearOfDate(Date d, int year) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.YEAR, year);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的月份是新的给定的月份
     * Set the month of a date object to a new given month.
     * @param d     需要设定的日期对象
     * @param month 新的月份
     * @return 新日期对象
     */
    public static Date setMonthOfDate(Date d, int month) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MONTH, month);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的天是新的给定的天
     * Set the day of a date object to a new given day.
     * @param d   需要设定的日期对象
     * @param day 新的天
     * @return 新日期对象
     */
    public static Date setDayOfDate(Date d, int day) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.DAY_OF_MONTH, day);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的小时是新的给定的小时
     * Setting the hour of a date object to a new given hour.
     * @param d    需要设定的日期对象
     * @param hour 新的小时数
     * @return 新日期对象
     */
    public static Date setHourOfDate(Date d, int hour) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的分钟是新的给定的分钟数
     * Set the minutes of a date object to a new given minute value.
     * @param d      需要设定的日期对象
     * @param minute 新的分钟数
     * @return 新日期对象
     */
    public static Date setMinuteOfDate(Date d, int minute) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MINUTE, minute);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的秒数是新的给定的分钟数
     * Setting the seconds of a date object to the new given minute value.
     *
     * @param d      需要设定的日期对象
     * @param second 新的秒数
     * @return 新日期对象
     */
    public static Date setSecondOfDate(Date d, int second) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.SECOND, second);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的毫秒数是新的给定的分钟数
     * Setting the milliseconds of a date object to a new given minute value.
     * @param d           需要设定的日期对象
     * @param millisecond 新的毫秒数
     * @return 新日期对象
     */
    public static Date setMillisecondOfDate(Date d, int millisecond) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MILLISECOND, millisecond);
        return calendar.getTime();
    }
    /**
     * 返回指定日期的月份的天数量
     * Retrieve the number of days in the month of the specified date.
     * @param d 日期对象
     */
    public static int getDaysOfMonth(Date d) {
        int year = getYearOfDate(d);
        int month = getMonthOfYear(d);
        return getDaysOfMonth(year, month);
    }
    /**
     * 返回指定日期的月份的天数量
     * Retrieve the number of days in the month of the specified date.
     * @param year  年
     * @param month 月
     */
    public static int getDaysOfMonth(int year, int month) {
        int days = 0;
        if (month == 2) {
            if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
                days = 29;
            } else {
                days = 28;
            }
        }
        if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
            days = 30;
        }
        if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) {
            days = 31;
        }
        return days;
    }
    /**
     * 返回系统时间,以日期对象形式返回
     *
     * @return 日期对象
     */
    public static Date getSystemDate() {
        return new Date(System.currentTimeMillis());
    }
    /**
     * 返回系统时间,以毫秒形式返回
     *
     * @return 毫秒数
     */
    public static long getSystemTime() {
        return System.currentTimeMillis();
    }
    /**
     * 返回24小时前的时间
     *
     * @param date
     * @return
     */
    public static Date getLastDay(Date date) {
        long day = date.getTime();
        long lastDay = day - 24 * 60 * 60 * 1000;
        return new Date(lastDay);
    }
    /**
     * 返回24小时后的时间
     *
     * @param date
     * @return
     */
    public static Date getTomorrow(Date date) {
        long day = date.getTime();
        long tomorrow = day + 24 * 60 * 60 * 1000;
        return new Date(tomorrow);
    }
    /**
     * 取得30天前的这个时间
     *
     * @return
     */
    public static Date getDayLastMonth() {
        long day = new Date().getTime();
        long dayLastMonth = day - 24 * 60 * 60 * 1000 * 20;
        return new Date(dayLastMonth);
    }
    /**
     * 取得30天后的这个时间
     *
     * @return
     */
    public static Date getDayNextMonth() {
        long day = new Date().getTime();
        long dayNextMonth = day + 20 * 24 * 60 * 60 * 1000;
        return new Date(dayNextMonth);
    }
    public static int getMonthCount(Date sDate, Date eDate) {
        String sDateStr = DateTimeHelper.formatDateTimetoString(sDate, "MM");
        String eDateStr = DateTimeHelper.formatDateTimetoString(eDate, "MM");
        int monthCount = Integer.parseInt(eDateStr) - Integer.parseInt(sDateStr) + 1;
        return monthCount;
    }
    /**
     * 取得下个月的这天,比如2月1日可取得3月1日,此方法有很大局限性,不能用于月末的天数
     * Obtain the same day of the following month, for example, February 1st can obtain March 1st. This method has significant limitations and cannot be used for the last days of the month.
     * @param date
     * @return
     */
    public static Date getDayNextMonth(Date date) {
        String yearStr = DateTimeHelper.formatDateTimetoString(date, "yyyy");
        String monthStr = DateTimeHelper.formatDateTimetoString(date, "MM");
        String dayStr = DateTimeHelper.formatDateTimetoString(date, "dd");
        int year = Integer.parseInt(yearStr);
        int month = Integer.parseInt(monthStr);
        if (month == 12) {
            month = 1;
            year = year + 1;
            yearStr = String.valueOf(year);
            monthStr = String.valueOf(month);
        }
        String dateStr = yearStr + "-" + monthStr + "-" + dayStr;
        try {
            date = DateTimeHelper.parseToDate(dateStr);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 获取当月开始时0点0分0秒
     *
     * @return
     */
    public static Date getCurrentMouthStart() {
        Date d = getSystemDate();
        d = setDayOfDate(d, 1);
        d = setHourOfDate(d, 0);
        d = setMinuteOfDate(d, 0);
        d = setSecondOfDate(d, 0);
        return d;
    }
    /**
     * 返回下月的这天
     *
     * @param date
     * @return
     */
    public static Date getDateNextMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, +1);
        return cal.getTime();
    }
    /**
     * 根据时间获取和当前时间的差距.
     * Obtain the difference between the current time and the time in question.
     * @param date - 待比较实际
     * @return 时间差距字符串
     */
    public static String getPassdTime(Date date) {
        if (null == date) {
            return null;
        }
        String ret = null;
        // 计算和当前相差秒数
        // Calculate the difference in seconds from the current time.
        long currentTimeMillis = System.currentTimeMillis();
        long timeDiff = (currentTimeMillis - date.getTime());
        int seconds = (int) (timeDiff / 1000);
        int minutes = seconds / 60;
        int hours = minutes / 60;
        int days = hours / 24;
        int months = days / 30;
        if (days <= 7) {
            if (days != 0) {
                ret = days + "天前";
            } else if (hours != 0) {
                ret = hours + "小时前";
            } else if (minutes != 0) {
                ret = minutes + "分钟前";
            } else {
                ret = "刚刚";
            }
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss");
            ret = sdf.format(date);
        }
        return ret;
    }
    /**
     * 获取当前日期后几天的日期
     * Obtaining the date of the day after several days from the current date.
     * @param day 天数
     * @return
     */
    public static Date getCurrentNextDays(int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, day);
        Date date = calendar.getTime();
        return date;
    }
    public static String getCurrentStringDate() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = simpleDateFormat.format(new Date());
        return dateString;
    }
    /**
     * 获取当前日期是星期几<br>
     * Obtain the day of the week for the current date.
     * @param dt
     * @return 当前日期是星期几
     */
    public static String getWeekOfDate(Date dt) {
        String[] weekDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0) {
            w = 0;
        }
        return weekDays[w];
    }
    /**
     * 获取今天时间 2017-11-20 00:00:00
     */
    public static Date todayDate() {
        try {
            String date = formatDatetoString(new Date());
            String todayString = date + " 00:00:00";
            return parseToDate(todayString, FMT_yyyyMMdd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Date();
    }
    /**
     * 获取指定日期的 时间 2017-11-20 00:00:00
     *
     * @param date
     * @return
     */
    public static Date createDate(Date date) {
        try {
            String dates = formatDatetoString(date);
            String todayString = dates + " 00:00:00";
            return parseToDate(todayString, FMT_yyyyMMdd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Date();
    }
    public static String createDateTime(Date date) {
        try {
            String dates = formatDatetoString(date);
            String time = DateTimeHelper.formatDateTimetoString(new Date(), FMT_HHmmss);
            String todayString = dates + " " + time;
            return todayString;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    /**
     * @param time
     * @return
     */
    public static String getTimeHint(Date time) {
        String hint = "";
        double minutes = DateTimeHelper.getMinutesOfTwoDate(new Date(), time);
        double hours = DateTimeHelper.getHoursOfTwoDate(new Date(), time);
        double days = DateTimeHelper.getDaysOfTwoDate(new Date(), time);
        if (minutes < 1) {
            hint = "刚刚";
        } else if (hours < 1) {
            hint = new Double(minutes).intValue() + "分钟前";
        } else if (days < 1) {
            hint = new Double(hours).intValue() + "小时前";
        } else if (days < 7) {
            hint = new Double(days).intValue() + "天前";
        } else {
            hint = DateTimeHelper.formatDateTimetoString(time, DateTimeHelper.FMT_yyyyMMdd);
        }
        return hint;
    }
    /**
     * 根据时间获取和当前时间的差距.
     * Obtain the difference between the current time and the time in question.
     * @param date - 待比较实际
     * @return 时间差距字符串
     */
    public static String getLoginTime(Date date) {
        if (null == date) {
            return null;
        }
        String ret = null;
        // 计算和当前相差秒数
        //Calculate the difference in seconds from the current time.
        long currentTimeMillis = System.currentTimeMillis();
        long timeDiff = (currentTimeMillis - date.getTime());
        int seconds = (int) (timeDiff / 1000);
        int minutes = seconds / 60;
        int hours = minutes / 60;
        int days = hours / 24;
        int months = days / 30;
        if (months != 0) {
            ret = "1个月前";
        } else if (days != 0) {
            ret = days + "天前";
        } else if (hours != 0) {
            ret = hours + "小时前";
        } else if (minutes != 0) {
            ret = minutes + "分钟前";
        } else {
            ret = "刚刚";
        }
        return ret;
    }
    public static Date getWXTime() {
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        Date date = calendar.getTime();
        return date;
    }
    /**
     * 是否是同一天
     * it the same day
     * @param first
     * @param second
     * @return
     */
    public static Boolean isSameDay(Date first, Date second) {
        if (first == null || second == null) {
            return false;
        }
        int day1 = getDayOfYear(first);
        int day2 = getDayOfYear(second);
        if (day1 != day2) {
            return false;
        }
        return true;
    }
    /**
     * 是否超过指定时刻
     * Has the specified time limit been exceeded
     * @param day  时间
     * @param time 指定时刻
     * @return
     */
    public static Boolean expireDayTime(Date day, Integer time) {
        if (null == day) {
            return false;
        }
        try {
            String dates = formatDatetoString(day);
            String timeHour = "";
            for (int i = 0; i <= 23; i++) {
                if (i == time) {
                    if (i < 10) {
                        timeHour += " 0" + time + ":00:00";
                    } else if (i < 23) {
                        timeHour += " " + time + ":00:00";
                    } else {
                        timeHour += " 00" + time + ":00:00";
                    }
                }
            }
            String todayString = dates + timeHour;
            Date esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss);
            if (DateTimeHelper.compareTwoDate(day, esDayTime) != 1) {
                int i = compareTwoDate(day, esDayTime);
                System.out.println(i);
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return false;
    }
    /**
     * 指定一天哪一个小时
     * Specify which hour of a particular day.
     * @param time
     * @return
     */
    public static Date createDayTime(Integer time) {
        String dates = formatDatetoString(new Date());
        String timeHour = "";
        for (int i = 0; i <= 23; i++) {
            if (i == time) {
                if (i < 10) {
                    timeHour += " 0" + time + ":00:00";
                } else if (i < 23) {
                    timeHour += " " + time + ":00:00";
                } else {
                    timeHour += " 00" + time + ":00:00";
                }
            }
        }
        String todayString = dates + timeHour;
        Date esDayTime = new Date();
        try {
            esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return esDayTime;
    }
    /**
     * 数字换算成中文(周)
     * Conversion of numbers to Chinese (weeks)
     * @param time
     * @return
     */
    public static String getWeekString(Integer time) {
        if (time == 1) {
            return "一";
        } else if (time == 2) {
            return "二";
        } else if (time == 3) {
            return "三";
        } else if (time == 4) {
            return "四";
        } else if (time == 5) {
            return "五";
        } else if (time == 6) {
            return "六";
        } else if (time == 0 || time == 7) {
            return "日";
        }
        return null;
    }
    /**
     * LocalDateTime -> Date
     *
     * @param localDateTime
     * @return
     */
    public static Date asDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }
    /**
     * Date -> LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDateTime asLocalDateTime(Date date) {
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
    }
    /**
     * 获取两个时间的间隔(秒)
     * Obtain the time difference between two instances (in seconds).
     * @param d1
     * @param d2
     * @return
     */
    public static long getDateBetween(Date d1, Date d2) {
        return Math.abs((d1.getTime() - d2.getTime()) / 1000);//取绝对值
    }
    /**
     * @param date
     * @return 获取今天最后的时间
     * Obtain the final time of today.
     */
    public static Date getEndDate(Date date) {
        if (date == null) {
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        return c.getTime();
    }
    /**
     * 日期天数差
     * Days Difference
     */
    public static int daysBetween(Date today, Date endDate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        today = sdf.parse(sdf.format(today));
        endDate = sdf.parse(sdf.format(endDate));
        Calendar cal = Calendar.getInstance();
        cal.setTime(today);
        long time1 = cal.getTimeInMillis();
        cal.setTime(endDate);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);
        return Integer.parseInt(String.valueOf(between_days));
    }
    /**
     * 获取到当月所有日期
     * Obtain all dates of the current month
     * @param date
     * @return
     */
    public static List<Date> getAllTheDateOftheMonth(Date date) {
        List<Date> list = new ArrayList<Date>();
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DATE, 1);
        int month = cal.get(Calendar.MONTH);
        while (cal.get(Calendar.MONTH) == month) {
            list.add(cal.getTime());
            cal.add(Calendar.DATE, 1);
        }
        return list;
    }
    /*public static void main(String[] args) throws ParseException {
        List<Date> allTheDateOftheMonth = getAllTheDateOftheMonth(new Date());
        Date date = allTheDateOftheMonth.get(11);
        System.out.println(date.toLocaleString());
        int i = daysBetween(new Date(), date);
        System.out.println(i);
    }*/
}
cloud-server-account/src/main/java/com/dsh/account/util/DateUtil.java
New file
@@ -0,0 +1,332 @@
/**
 * Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.dsh.account.util;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
import java.util.TimeZone;
public class DateUtil {
    private static TimeZone tz = TimeZone.getTimeZone("GMT+8");
    /**
     * 获取YYYY格式
     */
    public static String getYear() {
        return formatDate(new Date(), "yyyy");
    }
    /**
     * 获取YYYY格式
     */
    public static String getYear(Date date) {
        return formatDate(date, "yyyy");
    }
    /**
     * 获取YYYY-MM-DD格式
     */
    public static String getDay() {
        return formatDate(new Date(), "yyyy-MM-dd");
    }
    /**
     * 获取YYYY-MM-DD格式
     */
    public static String getDay(Date date) {
        return formatDate(date, "yyyy-MM-dd");
    }
    /**
     * 获取YYYYMMDD格式
     */
    public static String getDays() {
        return formatDate(new Date(), "yyyyMMdd");
    }
    /**
     * 获取YYYYMMDD格式
     */
    public static String getDays(Date date) {
        return formatDate(date, "yyyyMMdd");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss格式
     */
    public static String getTime() {
        return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss.SSS格式
     */
    public static String getMsTime() {
        return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
    }
    /**
     * 获取YYYYMMDDHHmmss格式
     */
    public static String getAllTime() {
        return formatDate(new Date(), "yyyyMMddHHmmss");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss格式
     */
    public static String getTime(Date date) {
        return formatDate(date, "yyyy-MM-dd HH:mm:ss");
    }
    public static String formatDate(Date date, String pattern) {
        String formatDate = null;
        if (StringUtils.isNotBlank(pattern)) {
            formatDate = DateFormatUtils.format(date, pattern);
        } else {
            formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
        }
        return formatDate;
    }
    /**
     * 日期比较,如果s>=e 返回true 否则返回false)
     *
     * @author luguosui
     */
    public static boolean compareDate(String s, String e) {
        if (parseDate(s) == null || parseDate(e) == null) {
            return false;
        }
        return parseDate(s).getTime() >= parseDate(e).getTime();
    }
    /**
     * 格式化日期
     */
    public static Date parseDate(String date) {
        return parse(date, "yyyy-MM-dd");
    }
    /**
     * 格式化日期
     */
    public static Date parseTimeMinutes(String date) {
        return parse(date, "yyyy-MM-dd HH:mm");
    }
    /**
     * 格式化日期
     */
    public static Date parseTime(String date) {
        return parse(date, "yyyy-MM-dd HH:mm:ss");
    }
    /**
     * 格式化日期
     */
    public static Date parse(String date, String pattern) {
        try {
            if(Objects.nonNull(date)) {
                return DateUtils.parseDate(date, pattern);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 格式化日期
     */
    public static String format(Date date, String pattern) {
        return DateFormatUtils.format(date, pattern);
    }
    /**
     * 把日期转换为Timestamp
     */
    public static Timestamp format(Date date) {
        return new Timestamp(date.getTime());
    }
    /**
     * 校验日期是否合法
     */
    public static boolean isValidDate(String s) {
        return parse(s, "yyyy-MM-dd HH:mm:ss") != null;
    }
    /**
     * 校验日期是否合法
     */
    public static boolean isValidDate(String s, String pattern) {
        return parse(s, pattern) != null;
    }
    public static int getDiffYear(String startTime, String endTime) {
        DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
        try {
            int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse(
                    startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365);
            return years;
        } catch (Exception e) {
            // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
            return 0;
        }
    }
    /**
     * <li>功能描述:时间相减得到天数
     */
    public static long getDaySub(String beginDateStr, String endDateStr) {
        long day = 0;
        SimpleDateFormat format = new SimpleDateFormat(
                "yyyy-MM-dd");
        Date beginDate = null;
        Date endDate = null;
        try {
            beginDate = format.parse(beginDateStr);
            endDate = format.parse(endDateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
        // System.out.println("相隔的天数="+day);
        return day;
    }
    /**
     * 得到n天之后的日期
     */
    public static String getAfterDayDate(String days) {
        int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sdfd.format(date);
        return dateStr;
    }
    /**
     * 得到n天之后是周几
     */
    public static String getAfterDayWeek(String days) {
        int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("E");
        String dateStr = sdf.format(date);
        return dateStr;
    }
    /**
     * 得到系统日期
     *
     * @return
     */
    public static Date getDate() {
        TimeZone.setDefault(tz);
        return new Date();
    }
    /**
     * 获取当前毫秒数
     *
     * @return long
     */
    public static long getCurMilli() {
        long millisecond = 0;
        Calendar cal = Calendar.getInstance();
        millisecond = cal.getTimeInMillis();
        return millisecond;
    }
    /**
     * 得到系统Calendar日期
     *
     * @return
     */
    public static Calendar getCalendar() {
        TimeZone.setDefault(tz);
        Calendar cal = Calendar.getInstance();
        return cal;
    }
    /**
     * 毫秒转日期时间
     *
     * @param millisecond
     * @return
     */
    public static String getDateTime(long millisecond) {
        if (millisecond == 0) {
            millisecond = getCurMilli();
        }
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar = getCalendar();
        calendar.setTimeInMillis(millisecond);
        return dateformat.format(calendar.getTime());
    }
    /**
     * 日期转毫秒(加分钟)
     *
     * @param date
     * @return
     */
    public static long getMillisecond_fz(String date, Integer day) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if ("".equals(date)) {
            newDate = sdf.format(DateUtil.getDate());
        } else {
            newDate = getDateTime(Long.parseLong(date));
        }
        Date dt = null;
        try {
            dt = sdf.parse(newDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.MINUTE, day);
        Date dt1 = rightNow.getTime();
        return dt1.getTime();
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/DoubleUtil.java
New file
@@ -0,0 +1,16 @@
package com.dsh.account.util;
import java.math.BigDecimal;
/**
 * Double文档
 */
public class DoubleUtil {
    public static Double format(Double num) {
        BigDecimal b = new BigDecimal(num);
        num = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return num;
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/EmojiUtil.java
New file
@@ -0,0 +1,95 @@
package com.dsh.account.util;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmojiUtil {
    /**
     * 编码
     *
     * @param str 待转换字符串
     * @return 转换后字符串
     * @throws UnsupportedEncodingException exception
     * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集)
     */
    public static String emojiEncode(String str)
            throws UnsupportedEncodingException {
        String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(
                        sb,
                        "[["
                                + URLEncoder.encode(matcher.group(1),
                                "UTF-8") + "]]");
            } catch (UnsupportedEncodingException e) {
//                LOG.error("emojiConvert error", e);
                throw e;
            }
        }
        matcher.appendTail(sb);
//        LOG.debug("emojiConvert " + str + " to " + sb.toString()
//                + ", len:" + sb.length());
        return sb.toString();
    }
    /**
     * 解码
     *
     * @param str 转换后的字符串
     * @return 转换前的字符串
     * @throws UnsupportedEncodingException exception
     * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串
     */
    public static String emojiDecode(String str)
            throws UnsupportedEncodingException {
        String patternString = "\\[\\[(.*?)\\]\\]";
        Pattern pattern = Pattern.compile(patternString);
        if (str == null) {
            return str;
        }
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(sb,
                        URLDecoder.decode(matcher.group(1), "UTF-8"));
            } catch (UnsupportedEncodingException e) {
//                LOG.error("emojiRecovery error", e);
                throw e;
            }
        }
        matcher.appendTail(sb);
//        LOG.debug("emojiRecovery " + str + " to " + sb.toString());
//        System.out.println("emojiRecovery " + str + " to " + sb.toString());
        return sb.toString();
    }
    /**
     * @param str 待过滤字符串
     * @return 过滤后字符串
     * exception
     * @Description 将字符串中的emoji表情过滤掉
     */
    public static String emojiSub(String str) {
        String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "");
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/HeaderAuthUtil.java
New file
@@ -0,0 +1,20 @@
package com.dsh.account.util;
import javax.servlet.http.HttpServletRequest;
public class HeaderAuthUtil {
    /**
     * 用户UserId变量
     */
    protected final static String HEADER_USERID = "userId";
    /**
     * 获取Request请求头UserId
     * @return
     */
    public static String getLoginAuthUserId (HttpServletRequest request) {
        String userId = request.getHeader(HEADER_USERID);
        return userId;
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/JsonUtil.java
New file
@@ -0,0 +1,157 @@
package com.dsh.account.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 *
 * 返回json数据封装工具类
 *
 * @ClassName: JsonUtil
 * @author: yuds
 * @date: 2019-09-20 09:19:27
 * @version: V1.0.0
 */
public class JsonUtil {
    /**
     * <li>将对象转化为json输出
     * <li>QuoteFieldNames ———-输出key时是否使用双引号,默认为true
     * <li>WriteMapNullValue ——–是否输出值为null的字段,默认为false
     * <li>WriteNullNumberAsZero —-数值字段如果为null,输出为0,而非null
     * <li>WriteNullListAsEmpty —–List字段如果为null,输出为[],而非null
     * <li>WriteNullStringAsEmpty —字符类型字段如果为null,输出为”“,而非null
     * <li>WriteNullBooleanAsFalse –Boolean字段如果为null,输出为false,而非null
     * <li>DisableCircularReferenceDetect 禁止循环引用检测
     */
    private static SerializerFeature[] serializerFeaturess = { SerializerFeature.WriteMapNullValue,
            SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullListAsEmpty,
            SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullBooleanAsFalse,
            SerializerFeature.DisableCircularReferenceDetect, };
    private JsonUtil() {
    }
    /**
     * fastJson Object转json
     *
     * @param obj
     * @return
     */
    public static String objToJson(Object obj) {
        return JSON.toJSONString(obj, serializerFeaturess);
    }
    /**
     * fastJson Object转json
     *
     * @param obj
     * @param dateFormat 时间格式化
     * @return
     */
    public static String objToJson(Object obj, String dateFormat) {
        return JSON.toJSONStringWithDateFormat(obj, dateFormat, serializerFeaturess);
    }
    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();
    /**
     * 将对象转换成json字符串。
     * <p>
     * Title: pojoToJson
     * </p>
     * <p>
     * Description:
     * </p>
     *
     * @param data
     * @return
     */
    public static String objectToJson(Object data) {
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            MAPPER.setDateFormat(fmt);
            String string = MAPPER.writeValueAsString(data);
            return string;
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 将json结果集转化为对象
     *
     * @param jsonData json数据
     * @param beanType    对象中的object类型
     * @return
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        try {
            T t = MAPPER.readValue(jsonData, beanType);
            return t;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 将json数据转换成pojo对象list
     * <p>
     * Title: jsonToList
     * </p>
     * <p>
     * Description:
     * </p>
     *
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
        try {
            List<T> list = MAPPER.readValue(jsonData, javaType);
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static JsonNode jsonToNode(String jsonData) {
        try {
            return MAPPER.readTree(jsonData);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
    public static Map<String, String> jsonToMap(String json) {
        JsonNode nodes = jsonToNode(json);
        Iterator<Map.Entry<String, JsonNode>> fields = nodes.fields();
        Map<String, String> map = new HashMap<>();
        while (fields.hasNext()) {
            Map.Entry<String, JsonNode> next = fields.next();
            String value = next.getValue().asText("");
            map.put(next.getKey(), value);
        }
        return map;
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/LocalDateTimeUtils.java
New file
@@ -0,0 +1,80 @@
package com.dsh.account.util;
import java.text.ParseException;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * LocalDateTimeUtils
 * LocalDateTime 时间工具
 *
 * @author yudeshan
 * @version V1.0
 */
public class LocalDateTimeUtils {
    private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 };
    private final static String[] constellationArr = new String[] { "摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" };
    /**
     * 取两个时间相差毫秒数
     *
     * @param start 开始时间
     * @param end   结束时间
     * @return
     */
    public static long betweenMillis(LocalDateTime start, LocalDateTime end) {
        Duration duration = Duration.between(start, end);
        return duration.toMillis();
    }
    /**
     * 通过生日计算年龄
     * @param birthDay 生日
     * @return
     * @throws ParseException
     */
    public static int getAgeByBirth(LocalDate birthDay) throws ParseException {
        int age = 0;
       //出生日期晚于当前时间,无法计算
        LocalDate now=LocalDate.now();
        if (birthDay.isAfter(now)) {
            throw new IllegalArgumentException( "生日大于当前时间!");
        }
        //当前年份
        int yearNow = now.getYear();
        //当前月份
        int monthNow = now.getMonthValue();
        //当前日期
        int dayOfMonthNow = now.getDayOfMonth();
        int yearBirth =birthDay.getYear();
        int monthBirth = birthDay.getMonthValue();
        int dayOfMonthBirth = birthDay.getDayOfMonth();
        //计算整岁数
        age = yearNow - yearBirth;
        if (monthNow <= monthBirth) {
            if (monthNow == monthBirth) {
                if (dayOfMonthNow < dayOfMonthBirth){
                    //当前日期在生日之前,年龄减一
                    age--;
                }
            } else {
                //当前月份在生日之前,年龄减一
                age--;
            }
        }
        return age;
    }
    /**
     * 根据月份计算星座
     */
    public static String getConstellation(LocalDate date) {
        Integer month=date.getMonthValue();
        Integer day=date.getDayOfMonth();
        return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month];
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/MessageUtils.java
New file
@@ -0,0 +1,26 @@
package com.dsh.account.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
@Component
public class MessageUtils {
    @Autowired
    private MessageSource messageSource;
    /**
     * 根据消息键和参数 获取消息 委托给spring messageSource
     *
     * @param code 消息键
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public String get(String code, Object... args) {
        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/RedisUtil.java
New file
@@ -0,0 +1,127 @@
package com.dsh.account.util;
import com.alibaba.csp.sentinel.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 * Redis工具类
 */
@Component
public class RedisUtil {
    @Autowired
    private JedisPool jedisPool;
    /**
     * 向redis中存储字符串没有过期时间
     * Storing strings in Redis without an expiration time.
     * @param key
     * @param value
     */
    public void setStrValue(String key, String value){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String set = resource.set(key, value);
            closeJedis(resource);
        }
    }
    /**
     * 以分钟为单位设置存储值(设置过期时间)
     * Set storage value in minutes (set expiration time) as units.
     * @param key
     * @param value
     * @param time 秒
     */
    public void setStrValue(String key, String value, int time){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String setex = resource.setex(key, time, value);
            closeJedis(resource);
        }
    }
    /**
     * 从redis中获取值
     * @param key
     * @return
     */
    public String getValue(String key){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String data = resource.get(key);
            closeJedis(resource);
            return data;
        }
        return null;
    }
    /**
     * 批量获取
     * @param kes
     * @return
     */
    public List<Object> getValues(List<String> kes){
        if(null != kes){
            Jedis resource = jedisPool.getResource();
            Pipeline pipelined = resource.pipelined();
            for(String key : kes){
                pipelined.get(key);
            }
            List<Object> list = pipelined.syncAndReturnAll();
            closeJedis(resource);
            pipelined.clear();
            try {
                pipelined.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            List<Object> data = new ArrayList<>();
            for(Object o : list){
                if(null != o){
                    data.add(o);
                }
            }
            return data;
        }
        return null;
    }
    /**
     * 删除key
     * @param key
     */
    public void remove(String key){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            Long del = resource.del(key);
            closeJedis(resource);
        }
    }
    /**
     * 删除资源
     * @param jedis
     */
    public void closeJedis(Jedis jedis){
        if(null != jedis){
            jedis.close();
        }
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/ResultUtil.java
New file
@@ -0,0 +1,191 @@
package com.dsh.account.util;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * 定义统一返回对象
 */
@ApiModel(value = "统一返回结果集")
public class ResultUtil<T> {
    public static final Integer SUCCESS = 200;
    public static final Integer PARAM_ERROR = 300;
    public static final Integer RUNTIME_ERROR = 400;
    public static final Integer ERROR = 500;
    public static final Integer TOKEN_ERROR = 600;
    public static final Integer SIGN_ERROR = 700;
    public static final String Token = "TOKEN_INVALID";
    public static final String SIGN = "SIGN_INVALID";
    @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效")
    private Integer code;//备用状态码
    @ApiModelProperty(name = "msg", value = "返回结果说明")
    private String msg;//返回说明
    @ApiModelProperty(name = "data", value = "返回结果值")
    private T data;//返回数据
    public String getMsg() {
        return msg;
    }
    public T getData() {
        return data;
    }
    public Integer getCode() {
        return code;
    }
    private ResultUtil(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    private ResultUtil(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg){
        return new ResultUtil<>(code, msg);
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){
        return new ResultUtil<>(code, msg, data);
    }
    /**
     * 错误信息
     * @return
     */
    public static ResultUtil error(String mag){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, new JSONObject());
    }
    /**
     * 错误信息
     * @return
     */
    public static <T> ResultUtil <T> error(String mag, T obj){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, obj);
    }
    /**
     * token失效
     * @return
     */
    public static ResultUtil tokenErr(){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new JSONObject());
    }
    /**
     * token失效
     * @return
     */
    public static ResultUtil tokenErr(String msg){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new JSONObject());
    }
    /**
     * 参数异常
     * @return
     */
    public static  ResultUtil paranErr(){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new JSONObject());
    }
    /**
     * 参数异常
     * @return
     */
    public static <T> ResultUtil<T> paranErr(T data){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    @Autowired
    private static MessageUtils messageUtils;
    /**
     * 运行异常
     * @return
     */
    public static ResultUtil runErr(){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new JSONObject());
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data, String msg){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data);
    }
    /**
     * 返回成功
     * @param
     * @return
     */
    public static ResultUtil success(){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new JSONObject());
    }
    /**
     * 返回成功
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data);
    }
    /**
     * 返回成功
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(String msg, T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data);
    }
    /**
     * 签名无效
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> sign(){
        return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN);
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/StrUtils.java
New file
@@ -0,0 +1,102 @@
package com.dsh.account.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class StrUtils {
    /**
     * 把逗号分隔的字符串转换字符串数组
     * Convert comma-separated string to string array.
     * @param str
     * @return
     */
    public static String[] splitStr2StrArr(String str,String split) {
        if (str != null && !str.equals("")) {
            return str.split(split);
        }
        return null;
    }
    /**
     * 把逗号分隔字符串转换List的Long
     *
     * @param str
     * @return
     */
    public static List<Long> splitStr2LongArr(String str) {
        String[] strings = splitStr2StrArr(str,",");
        if (strings == null) return null;
        List<Long> result = new ArrayList<>();
        for (String string : strings) {
            result.add(Long.parseLong(string));
        }
        return result;
    }
    /**
     * 把逗号分隔字符串转换List的Long
     *
     * @param str
     * @return
     */
    public static List<Long> splitStr2LongArr(String str,String split) {
        String[] strings = splitStr2StrArr(str,split);
        if (strings == null) return null;
        List<Long> result = new ArrayList<>();
        for (String string : strings) {
            result.add(Long.parseLong(string));
        }
        return result;
    }
    public static String getRandomString(int length) {
        String str = "0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(10);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String getComplexRandomString(int length) {
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(62);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String getClassCodeString(int length) {
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number =random.nextInt(36);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String convertPropertiesToHtml(String properties){
        //1:容量:6:32GB_4:样式:12:塑料壳
        StringBuilder sBuilder = new StringBuilder();
        String[] propArr = properties.split("_");
        for (String props : propArr) {
            String[] valueArr = props.split(":");
            sBuilder.append(valueArr[1]).append(":").append(valueArr[3]).append("<br>");
        }
        return sBuilder.toString();
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/StringUtil.java
New file
@@ -0,0 +1,25 @@
package com.dsh.account.util;
import cn.mb.cloud.common.core.exception.BusinessException;
import org.springframework.util.StringUtils;
/**
 * 判断字符串不能为空和null,以及号码格式效验,
 * 否则则抛出异常信息
 */
public class StringUtil {
    private StringUtil() {
    }
    public static void checkNull(String str, String message) throws BusinessException {
        if (!StringUtils.hasLength(str)) {
            throw new BusinessException(message);
        }
    }
    public static void checkFormat(String str, String message) throws BusinessException {
        if (!str.matches("^1[2|3|4|5|6|7|8|9][0-9]{9}$")) {
            throw new BusinessException(message);
        }
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/StudyTimeUtil.java
New file
@@ -0,0 +1,37 @@
package com.dsh.account.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
//根据当前传入的时间,返回距离当前时间多少天
public class StudyTimeUtil {
    private StudyTimeUtil() {
    }
    /**
     * 获取两个时间的间隔(秒)Obtain the time difference between two instances (in seconds).
     *
     * @param startDate 开始的时间
     * @return 返回当前时间与开始时间的相差天数
     */
    public static int getDateBetween(Date startDate) throws ParseException {
        Date endDate = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        long startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime();
        long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime();
        int days = (int)((endDateTime - startDateTime)  / (1000 * 3600 * 24));
        return days;
    }
    public static Date getStartDate(LocalDateTime localDate) {
        Date date = Date.from(localDate.atZone(ZoneId.systemDefault()).toInstant());
        return date;
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/TokenUtil.java
New file
@@ -0,0 +1,32 @@
package com.dsh.account.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public class TokenUtil {
    @Autowired
    private RedisUtil redisUtil;
    public Integer getUserIdFormRedis(HttpServletRequest request) throws Exception {
        String requestHeader = request.getHeader("Authorization");
        if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
            requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1);
            String key = null;
            int length = requestHeader.length();
            if(length > 32){
                key = requestHeader.substring(length - 32);
            }else{
                key = requestHeader;
            }
            String value = redisUtil.getValue(key);
            return null != value ? Integer.valueOf(value) : null;
        }else{
            return null;
        }
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/Auth.java
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/Base64Utils.java
New file
@@ -0,0 +1,48 @@
package com.dsh.account.util.akeylogin;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Utils {
    private static final Charset DEFAULT_CHARSET;
    public Base64Utils() {
    }
    public static byte[] encode(byte[] src) {
        return src.length == 0 ? src : Base64.getEncoder().encode(src);
    }
    public static byte[] decode(byte[] src) {
        return src.length == 0 ? src : Base64.getDecoder().decode(src);
    }
    public static byte[] encodeUrlSafe(byte[] src) {
        return src.length == 0 ? src : Base64.getUrlEncoder().encode(src);
    }
    public static byte[] decodeUrlSafe(byte[] src) {
        return src.length == 0 ? src : Base64.getUrlDecoder().decode(src);
    }
    public static String encodeToString(byte[] src) {
        return src.length == 0 ? "" : new String(encode(src), DEFAULT_CHARSET);
    }
    public static byte[] decodeFromString(String src) {
        return src.isEmpty() ? new byte[0] : decode(src.getBytes(DEFAULT_CHARSET));
    }
    public static String encodeToUrlSafeString(byte[] src) {
        return new String(encodeUrlSafe(src), DEFAULT_CHARSET);
    }
    public static byte[] decodeFromUrlSafeString(String src) {
        return decodeUrlSafe(src.getBytes(DEFAULT_CHARSET));
    }
    static {
        DEFAULT_CHARSET = StandardCharsets.UTF_8;
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/BaseUtils.java
New file
@@ -0,0 +1,23 @@
package com.dsh.account.util.akeylogin;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
public class BaseUtils {
    public static boolean isEmpty(Object target) {
        if (target == null) {
            return true;
        }
        if (target instanceof String && "".equals(target)) {
            return true;
        } else if (target instanceof Collection) {
            return ((Collection<?>) target).isEmpty();
        } else if (target instanceof Map) {
            return ((Map<?, ?>) target).isEmpty();
        } else if (target.getClass().isArray()) {
            return Array.getLength(target) == 0;
        }
        return false;
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/DES.java
New file
@@ -0,0 +1,90 @@
package com.dsh.account.util.akeylogin;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
public class DES {
    public static final String ALGORITHM = "DES";
    public static final String PADDING = "DES/CBC/PKCS5Padding";
    private static final byte[] DEFAULT_INITIALIZATION_VECTOR = ("00000000".getBytes());
    private String padding = PADDING;
    private byte[] initializationVectorBytes = DEFAULT_INITIALIZATION_VECTOR;
    private AlgorithmParameterSpec paramSpec;
    public DES() {
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(String padding) {
        this.padding = padding;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(String padding, byte[] initializationVectorBytes) {
        this.padding = padding;
        this.initializationVectorBytes = initializationVectorBytes;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(byte[] initializationVectorBytes) {
        this.initializationVectorBytes = initializationVectorBytes;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public byte[] encodeBytes(byte[] data, byte[] key) throws Exception {
        Key secretKey = getKey(key);
        Cipher cipher = Cipher.getInstance(padding);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec);
        byte[] bytes = cipher.doFinal(data);
        return bytes;
    }
    public byte[] decodeBytes(byte[] data, byte[] key) throws Exception {
        Key secretKey = getKey(key);
        Cipher cipher = Cipher.getInstance(padding);
        cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);
        return cipher.doFinal(data);
    }
    public String getPadding() {
        return padding;
    }
    public byte[] getInitializationVectorBytes() {
        return initializationVectorBytes;
    }
    private static Key getKey(byte[] key) throws Exception {
        DESKeySpec dks = new DESKeySpec(key);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
        SecretKey secretKey = keyFactory.generateSecret(dks);
        return secretKey;
    }
    public static byte[] decode(byte[] data, byte[] key) throws Exception {
        return decode(data, key, DEFAULT_INITIALIZATION_VECTOR);
    }
    public static byte[] encode(byte[] data, byte[] key) throws Exception {
        return encode(data, key, DEFAULT_INITIALIZATION_VECTOR);
    }
    public static byte[] decode(byte[] data, byte[] key, byte[] ivBytes) throws Exception {
        DES des = new DES(PADDING, ivBytes);
        return des.decodeBytes(data, key);
    }
    public static byte[] encode(byte[] data, byte[] key, byte[] ivBytes) throws Exception {
        DES des = new DES(PADDING, ivBytes);
        return des.encodeBytes(data, key);
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/LoginUtil.java
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/Md5Util.java
New file
@@ -0,0 +1,48 @@
package com.dsh.account.util.akeylogin;
import java.security.MessageDigest;
public class Md5Util {
    private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    /**
     * MD5加密
     *
     * @param origin      字符
     * @param charsetname 编码
     * @return
     */
    public static String MD5Encode(String origin, String charsetname) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (null == charsetname || "".equals(charsetname)) {
                resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
            } else {
                resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
            }
        } catch (Exception e) {
        }
        return resultString;
    }
    public static String byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }
    public static String byteToHexString(byte b) {
        int n = b;
        if (n < 0) {
            n += 256;
        }
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigIts[d1] + hexDigIts[d2];
    }
}
cloud-server-account/src/main/java/com/dsh/account/util/akeylogin/SignUtil.java
New file
@@ -0,0 +1,24 @@
package com.dsh.account.util.akeylogin;
import java.util.Map;
import java.util.TreeMap;
public class SignUtil {
    private static String charset = "utf8";
    public static String getSign(Map<String, Object> data, String secret) {
        if (data == null) {
            return null;
        }
        //排序参数
        Map<String, Object> mappingList = new TreeMap<>(data);
        StringBuilder plainText= new StringBuilder();
        mappingList.forEach((k, v) -> {
            if (!"sign".equals(k) && !BaseUtils.isEmpty(v)) {
                plainText.append(String.format("%s=%s&", k, v));
            }
        });
        String substring = plainText.substring(0, plainText.length() - 1);
        return Md5Util.MD5Encode(substring + secret, charset);
    }
}
cloud-server-account/src/main/java/com/dsh/course/advice/ControllerException.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/DateTimeHelper.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/DateUtil.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/DoubleUtil.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/EmojiUtil.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/HeaderAuthUtil.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/JsonUtil.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/MessageUtils.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/RedisUtil.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/ResultUtil.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/StrUtils.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/StringUtil.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/StudyTimeUtil.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/TokenUtil.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/Base64Utils.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/BaseUtils.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/DES.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/Md5Util.java
File was deleted
cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/SignUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/activity/advice/ControllerException.java
New file
@@ -0,0 +1,45 @@
package com.dsh.activity.advice;
import cn.mb.cloud.common.core.constant.enums.ErrorCodeConstants;
import cn.mb.cloud.common.core.exception.BusinessException;
import cn.mb.cloud.common.core.util.ResponseData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestControllerAdvice
public class ControllerException {
    @ExceptionHandler(BusinessException.class)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public ResponseData bussiness(BusinessException e) {
        log.error("业务异常 message= " + e.getMessage() + " code= " + e.getErrorCode(), e);
        return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).
                msg(e.getMessage()).build();
    }
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public ResponseData runtimeException(RuntimeException e) {
        log.error("运行时异常信息" + e.getMessage(), e);
        return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).msg(e.getMessage()).build();
    }
    /**
     * 全局异常.
     *
     * @param e the e
     * @return R
     */
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public ResponseData exception(Exception e) {
        log.error("全局异常信息" + e.getMessage(), e);
        return ResponseData.fail();
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/DateTimeHelper.java
New file
@@ -0,0 +1,1769 @@
package com.dsh.activity.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
/**
 * 日期时间类型的工具类,提供对日期和时间基于毫秒及以上精度的格式化方法、
 * 运算方法、比较方法等。注意:大部分对日期对象(java.util.Date)操作的方法,
 * 不会修改原日期对象,而以一个新的日期对象返回。
 * <p>
 * <p>
 * <p><pre><b>
 * 历史更新记录:</b>
 * 2004-6-17  创建此类型
 * 2005-9-30  修改方法:parseToDate(),去掉了对年份从(1970-9999)这个范围的限制。抛出异常:IllegalArgumentException(),JThinkRuntimeException()
 * 2005-10-2  修改方法: 其它方法,抛出异常:IllegalArgumentException(),JThinkRuntimeException()
 * 2005-10-2  增加方法: addTime(Date d, double times, int type)
 * 2005-10-2  增加方法: addSystemTime()
 * 2005-10-2  修改方法, 对于所有以日期对象类型java.util.Date为参数的方法,如果日期为null,都抛出异常:IllegalArgumentException()
 * <p>
 * </pre></p>
 */
public final class DateTimeHelper {
    /**
     * 把时间格式化成如:2002-08-03 8:26:30.400 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssSa_12 = "yyyy-MM-dd KK:mm:ss.S a";
    /**
     * 把时间格式化成如:2002-08-03 8:26:16 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssa_12 = "yyyy-MM-dd KK:mm:ss a";
    /**
     * 把时间格式化成如:2002-08-03 8:26 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmma_12 = "yyyy-MM-dd KK:mm a";
    /**
     * 把时间格式化成如:2002-08-03 8 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHa_12 = "yyyy-MM-dd KK a";
    /**
     * 把时间格式化成如:2002-07-05 am 格式的字符串
     */
    public final static String FMT_yyyyMMdda_12 = "yyyy-MM-dd a";
    /**
     * 把时间格式化成如:2002-08-03 08:26:30.400 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssS = "yyyy-MM-dd HH:mm:ss.S";
    /**
     * 把时间格式化成如:2002-08-03 08:26:16 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";
    /**
     * 把时间格式化成如:2002-08-03 08:26 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmm = "yyyy-MM-dd HH:mm";
    /**
     * 把时间格式化成如:2002-08-03 08 格式的字符串
     */
    public final static String FMT_yyyyMMddHH = "yyyy-MM-dd HH";
    /**
     * 把时间格式化成如:2002-07-05 格式的字符串
     */
    public final static String FMT_yyyyMMdd = "yyyy-MM-dd";
    /**
     * 把时间格式化成如:2002-07 格式的字符串
     */
    public final static String FMT_yyyyMM = "yyyy-MM";
    /**
     * 把时间格式化成如:07.19 格式的字符串
     */
    public final static String FMT_MMdd = "MM.dd";
    /**
     * 把时间格式化成如:12:08 PM(下午) 格式的字符串
     */
    public final static String FMT_HHmmA_12 = "KK:mm a";
    /**
     * 把时间格式化成如:0:55 AM上午, CST 格式的字符串
     */
    public final static String FMT_HHmmAz_12 = "KK:mm a,z";
    /**
     * 把时间格式化成如:0:56 AM上午, 中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmAzzzz_12 = "KK:mm a,zzzz";
    /**
     * 把时间格式化成如:12:08:23 am 格式的字符串
     */
    public final static String FMT_HHmmssA_12 = "KK:mm:ss a";
    /**
     * 把时间格式化成如:0:55:33 AM上午, CST 格式的字符串
     */
    public final static String FMT_HHmmssAz_12 = "KK:mm:ss a,z";
    /**
     * 把时间格式化成如:0:56:23 AM上午, 中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmssAzzzz_12 = "KK:mm:ss a,zzzz";
    /**
     * 把时间格式化成如:22:04:45 格式的字符串
     */
    public final static String FMT_HHmmss = "HH:mm:ss";
    /**
     * 把时间格式化成如:22:04:45.824 格式的字符串
     */
    public final static String FMT_HHmmssS = "HH:mm:ss.S";
    /**
     * 把时间格式化成如:22:04 格式的字符串
     */
    public final static String FMT_HHmm = "HH:mm";
    /**
     * 把时间格式化成如:22:04,CST 格式的字符串
     */
    public final static String FMT_HHmmz = "HH:mm,z";
    /**
     * 把时间格式化成如:22:04,中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmzzzz = "HH:mm,zzzz";
    /**
     * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串
     */
    public final static String FMT_WWMMDDYY_EN = "EEE,MMM d,''yyyy";
    /**
     * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串
     */
    public final static String FMT_WWMMDDYY_CN = "EEE,yyyy年MMMd号";
    /**
     * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串
     */
    public final static String FMT_MMDDYY_EN = "MMM d,''yyyy";
    /**
     * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串
     */
    public final static String FMT_MMDDYY_CN = "yyyy年MMMd号";
    /**
     * 把时间格式化成如:星期几 格式的字符串,即可获得该日这个时间是星期几
     */
    public final static String FMT_WW = "EEE";
    public final static String FMT_ddMMyyyy = "dd-MM-yyyy";
    /**
     * 把时间格式成日期数字,如:20120606
     */
    public final static String FMT_yyyyMMdd_noseparator = "yyyyMMdd";
    public final static String FMT_yyyyMMdd_Zh = "yyyy年MM月dd日";
    public final static String FMT_yyyyMMddHH_noseparator = "yyyyMMddHH";
    /**
     * 把时间格式成日期数字,如:20120606121212
     */
    public final static String FMT_yyyyMMddhhmmss_noseparator = "yyyyMMddHHmmss";
    /**
     * 把时间格式化成如:2002.07.05 格式的字符串
     */
    public final static String FMT_yyyyxMMxdd = "yyyy.MM.dd";
    /**
     * 常用的格式化时间的格式组,用于本类中格式化字符串成时间型
     */
    private final static String[] formatStr = {
            FMT_ddMMyyyy,
            FMT_yyyyMMddHHmmssS,
            FMT_yyyyMMddHHmmss,
            FMT_yyyyMMddHHmm,
            FMT_yyyyMMddHH,
            FMT_yyyyMMdd,
            FMT_HHmmss,
            FMT_HHmmssS,
            FMT_HHmm,
            FMT_HHmmz,
            FMT_HHmmzzzz,
            FMT_yyyyMMddHHmmssSa_12,
            FMT_yyyyMMddHHmmssa_12,
            FMT_yyyyMMddHHmma_12,
            FMT_yyyyMMddHHa_12,
            FMT_yyyyMMdda_12,
            FMT_HHmmA_12,
            FMT_HHmmAz_12,
            FMT_HHmmAzzzz_12,
            FMT_HHmmssA_12,
            FMT_HHmmssAz_12,
            FMT_HHmmssAzzzz_12
    };
    /**
     * 私有化构造器,使得不能产生该类对象,类中所有的方法均为静态方法
     */
    private DateTimeHelper() {
    }
    /**
     * 根据给出的Date值和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param date
     * @param formatStr
     * @return 如果为null,返回字符串""
     */
    public static String formatDateTimetoString(Date date, String formatStr) {
        String reStr = "";
        if (date == null || formatStr == null || formatStr.trim().length() < 1) {
            return reStr;
        }
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern(formatStr);
        reStr = sdf.format(date);
        return reStr;
    }
    public static Date getSystemDate(String fmtstr) {
        try {
            return parseToDate(formatDateTimetoString(getSystemDate(), fmtstr));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return getSystemDate();
        }
    }
    /**
     * 根据给出的Date值和格式串采用给定的国家所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param date      日期对象
     * @param formatStr 日期格式
     * @return 如果为null,返回字符串""
     */
    public static String formatDateTimetoString(Date date, String formatStr, Locale locale) {
        String reStr = "";
        if (date == null || formatStr == null || locale == null || formatStr.trim().length() < 1) {
            return reStr;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale);
        reStr = sdf.format(date);
        return reStr;
    }
    /**
     * 根据给出的Date值字符串和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param dateStr   日期串
     * @param formatStr 日期格式
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateStr, String formatStr) throws Exception {
        String dStr = "";
        if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0) {
            dStr = formatDateTimetoString(parseToDate(dateStr), formatStr);
        }
        return dStr;
    }
    /**
     * 根据给出的Date值字符串和格式串采用指定国家的风格来格式化时间,并返回相应的字符串
     *
     * @param dateStr   日期串
     * @param formatStr 日期格式
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateStr, String formatStr, Locale locale) throws Exception {
        String dStr = "";
        if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0 && locale != null) {
            dStr = formatDateTimetoString(parseToDate(dateStr, locale), formatStr, locale);
        }
        return dStr;
    }
    /**
     * 按指定的格式和操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @param formatStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, String formatStr) throws Exception {
        if (dateTimeStr == null || formatStr == null || dateTimeStr.trim().length() < 1 || formatStr.trim().length() < 1) {
            throw new IllegalArgumentException("参数dateTimeStr、formatStr不能是null或空格串!");
        }
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
        try {
            return sdf.parse(dateTimeStr);
        } catch (ParseException e) {
            throw new Exception(e);
        }
    }
    /**
     * 按指定的格式和指定国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @param formatStr
     * @param locale
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, String formatStr, Locale locale) throws Exception {
        if (dateTimeStr != null && formatStr != null && locale != null && dateTimeStr.trim().length() > 0 && formatStr.trim().length() > 0) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
                throw new Exception(e);
            }
        } else {
            throw new IllegalArgumentException("参数dateTimeStr、formatStr、locale不能是null或空格串!");
        }
    }
    /**
     * 按操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr) throws Exception {
        if (dateTimeStr == null || dateTimeStr.trim().length() < 1) {
            throw new IllegalArgumentException("参数dateTimeSt不能是null或空格串!");
        }
        int formatStrLength = formatStr.length;
        int i = 0;
        for (i = 0; i < formatStrLength; i++) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i]);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
            }
        }
        throw new Exception("日期格式不正确!");
    }
    /**
     * 根据给出的年月和日返回一个日期型的对象
     *
     * @param year  年
     * @param month 月 ,1到12
     * @param day   日 ,1到31
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(int year, int month, int day) throws Exception {
        if (month < 1 || month > 12 || day < 1 || day > 31) {
            throw new IllegalArgumentException("参数不正确!");
        }
        String yearStr = String.valueOf(year);
        String monthStr = String.valueOf(month);
        String dayStr = String.valueOf(day);
        return parseToDate(yearStr + "-" + monthStr + "-" + dayStr);
    }
    /**
     * 根据给出的年月日、时分秒、返回一个对应的Date型对象
     *
     * @param year  年
     * @param month 月 ,1到12
     * @param day   日 ,1到31
     * @param h     小时,从0到23
     * @param m     分,从0到60
     * @param s     秒,从0到60
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(int year, int month, int day, int h, int m, int s) throws Exception {
        if (month < 1 || month > 12 || day < 1 || day > 31 || h < 0 || h > 23 || m < 0 || m > 60 || s < 0 || s > 60) {
            throw new IllegalArgumentException("参数不正确!");
        }
        String yearStr = String.valueOf(year);
        String monthStr = String.valueOf(month);
        String dayStr = String.valueOf(day);
        String hStr = String.valueOf(h);
        String mStr = String.valueOf(m);
        String sStr = String.valueOf(s);
        return parseToDate(yearStr + "-" + monthStr + "-" + dayStr + " " + hStr + ":" + mStr + ":" + sStr);
    }
    /**
     * 按指定国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, Locale locale) throws Exception {
        if (dateTimeStr == null || dateTimeStr.trim().length() < 1 || locale == null) {
            throw new IllegalArgumentException("参数dateTimeSt、locale不能是null或空格串!");
        }
        int formatStrLength = formatStr.length;
        int i = 0;
        for (i = 0; i < formatStrLength; i++) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i], locale);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
            }
        }
        throw new Exception("日期格式不正确!");
    }
    /**
     * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateTimeStr) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss);
    }
    /**
     * 将给定的日期时间字符串按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateTimeStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss, locale);
    }
    /**
     * 将给定的日期时间按操作系统默认的国家内格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTime
     * @return 如果为null,返回""
     */
    public static String formatDateTimetoString(Date dateTime) {
        return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss);
    }
    /**
     * 将给定的日期时间按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTime
     * @param locale
     * @return 如果为null,返回""
     */
    public static String formatDateTimetoString(Date dateTime, Locale locale) {
        return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss, locale);
    }
    /**
     * 将给定的日期字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param date
     * @param dateStr 日期串
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDatetoString(Date date, String dateStr) throws Exception {
        return formatDateTimetoString(dateStr, FMT_yyyyMMdd);
    }
    /**
     * 将给定的日期字符串按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param dateStr 日期串
     * @param locale  Locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDatetoString(String dateStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateStr, FMT_yyyyMMdd, locale);
    }
    /**
     * 将给定的日期按指定操作系统默认国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param d 日期对象
     * @return 如果为null,返回""
     */
    public static String formatDatetoString(Date d) {
        return formatDateTimetoString(d, FMT_yyyyMMdd);
    }
    /**
     * 将给定的日期按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param d      日期对象
     * @param locale Locale
     * @return 如果为null,返回""
     */
    public static String formatDatetoString(Date d, Locale locale) {
        return formatDateTimetoString(d, FMT_yyyyMMdd, locale);
    }
    /**
     * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatTimetoString(String dateTimeStr) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss);
    }
    /**
     * 将给定的日期时间字符串按指定国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatTimetoString(String dateTimeStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale);
    }
    /**
     * 将给定的日期时间按指定操作系统默认国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     */
    public static String formatTimetoString(Date dateTimeStr) {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss);
    }
    /**
     * 将给定的日期时间按指定国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     */
    public static String formatTimetoString(Date dateTimeStr, Locale locale) {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale);
    }
    /**
     * 返回一个时间的年份整数
     *
     * @param d
     * @return 年份
     */
    public static int getYearOfDate(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.YEAR);
    }
    /**
     * 返回一个时间的月份整数
     *
     * @param d
     * @return 月份
     */
    public static int getMonthOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.MONTH) + 1;
    }
    /**
     * 返回一个时间的天份整数,是这个月的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfMonth(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }
    /**
     * 返回一个时间的天份整数,是这个年份的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_YEAR);
    }
    /**
     * 返回一个时间的天份整数,是这个周的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfWeek(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_WEEK) - 1;
    }
    /**
     * 返回一个时间的周的整数,是这个月的第几周
     *
     * @param d
     * @return 周
     */
    public static int getWeekOfMonth(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.WEEK_OF_MONTH);
    }
    /**
     * 返回一个时间的周的整数,是这个年份的第几周
     *
     * @param d
     * @return 周
     */
    public static int getWeekOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.WEEK_OF_YEAR);
    }
    /**
     * 返回该时间所对应的在一天中的小时数的整数,如当前(Date now)是下午3点,返回为15
     *
     * @param d
     * @return 小时
     */
    public static int getHoursOfDay(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int hours = calendar.get(Calendar.HOUR_OF_DAY);
        return hours;
    }
    /**
     * 返回该时间所对应的在一天中的小时数的整数(采用12小时制),如当前(Date now)是下午3点,返回为3
     *
     * @param d
     * @return 小时
     */
    public static int getHoursOfDay12(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int hours = calendar.get(Calendar.HOUR);
        return hours;
    }
    /**
     * 返回该时间所对应的分钟数中的整数,如now是15点14分,则返回14
     *
     * @param d
     * @return 分钟
     */
    public static int getMinutesOfHour(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int minutes = calendar.get(Calendar.MINUTE);
        return minutes;
    }
    /**
     * 返回该时间所对应的秒数中的整数,如now是15点14分34秒,则返回34
     *
     * @param d
     * @return 秒
     */
    public static int getSecondsOfMinute(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int seconds = calendar.get(Calendar.SECOND);
        return seconds;
    }
    /**
     * 返回该时间所对应的毫秒数中的整数,如now是15点14分34秒470毫秒,则返回470
     *
     * @param d
     * @return 毫秒
     */
    public static int getMillisecondsOfSecond(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int millisecond = calendar.get(Calendar.MILLISECOND);
        return millisecond;
    }
    /**
     * 返回该时间相对于1970年1月1日开始计算的对应的毫秒数
     *
     * @param d
     * @return 毫秒数
     */
    public static long getTime(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        return d.getTime();
    }
    /**
     * 比较两个时间的先后顺序。
     * 如果时间d1在d2之前,返回1,
     * 如果时间d1在d2之后,返回-1,
     * 如果二者相等,返回0
     *
     * @param d1
     * @param d2
     * @return 如果时间d1在d2之前,返回1,
     * 如果时间d1在d2之后,返回-1,
     * 如果二者相等,返回0
     */
    public static int compareTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long dI1 = d1.getTime();
        long dI2 = d2.getTime();
        if (dI1 > dI2) {
            return -1;
        } else if (dI1 < dI2) {
            return 1;
        } else {
            return 0;
        }
    }
    /**
     * 返回两个日期之间的毫秒数的差距
     *
     * @param d1
     * @param d2
     * @return 二者至1970年1.1后的毫秒数的差值
     */
    public static long getMillisecondsOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long dI1 = d1.getTime();
        long dI2 = d2.getTime();
        return (dI1 - dI2);
    }
    /**
     * 获得两个日期之间相差的秒数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的秒数
     */
    public static double getSecondsOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long i = getMillisecondsOfTwoDate(d1, d2);
        return (double) i / 1000;
    }
    /**
     * 获得两个日期之间相差的分钟数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的分钟数
     */
    public static double getMinutesOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的小时数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的小时数
     */
    public static double getHoursOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 60 / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的天数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的天数
     */
    public static double getDaysOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 24 / 60 / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的天数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的天数
     */
    public static Long daysOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return millions / 24 / 60 / 60 / 1000;
    }
    /**
     * 把给定的时间加上指定的时间值,可以为负。
     *
     * @param d     日期对象
     * @param times 时间值
     * @param type  类型,
     *              Calendar.MILLISECOND,毫秒<BR>
     *              Calendar.SECOND,秒<BR>
     *              Calendar.MINUTE,分钟<BR>
     *              Calendar.HOUR,小时<BR>
     *              Calendar.DATE,日<BR>
     * @return 如果d为null,返回null
     */
    public static Date addTime(Date d, double times, int type) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        long qv = 1;
        switch (type) {
            case Calendar.MILLISECOND:
                qv = 1;
                break;
            case Calendar.SECOND:
                qv = 1000;
                break;
            case Calendar.MINUTE:
                qv = 1000 * 60;
                break;
            case Calendar.HOUR:
                qv = 1000 * 60 * 60;
                break;
            case Calendar.DATE:
                qv = 1000 * 60 * 60 * 24;
                break;
            default:
                throw new RuntimeException("时间类型不正确!type=" + type);
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        long milliseconds = (long) Math.round(Math.abs(times) * qv);
        if (times > 0) {
            for (; milliseconds > 0; milliseconds -= 2147483647) {
                if (milliseconds > 2147483647) {
                    calendar.add(Calendar.MILLISECOND, 2147483647);
                } else {
                    calendar.add(Calendar.MILLISECOND, (int) milliseconds);
                }
            }
        } else {
            for (; milliseconds > 0; milliseconds -= 2147483647) {
                if (milliseconds > 2147483647) {
                    calendar.add(Calendar.MILLISECOND, -2147483647);
                } else {
                    calendar.add(Calendar.MILLISECOND, -(int) milliseconds);
                }
            }
        }
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的年份,可以为负, 返回新的被加上了年份的日期对象,不影响参数日期对象值
     * Given a certain time and a specified year, which can be negative, returns a new date object with the added year, without affecting the value of the original date object.
     * @param d
     * @param years
     * @return 日期对象
     */
    public static Date addYears(Date d, int years) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.YEAR, years);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的月份,可以为负
     * Adding the specified number of month to the given time is possible, including negative values.
     * @param d
     * @param months
     * @return 日期对象
     */
    public static Date addMonths(Date d, int months) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MONTH, months);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的天数,可以为负
     * Adding the specified number of day to the given time is possible, including negative values.
     * @param d    日期对象
     * @param days
     * @return 日期对象
     */
    public static Date addDays(Date d, int days) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.HOUR, days * 24);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的小时,可以为负
     * Adding the specified number of hour to the given time is possible, including negative values.
     * @param d     日期对象
     * @param hours
     * @return 日期对象
     */
    public static Date addHours(Date d, int hours) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.HOUR, hours);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的分钟,可以为负
     * Adding the specified number of minute to the given time is possible, including negative values.
     * @param d
     * @param minutes
     * @return 日期对象
     */
    public static Date addMinutes(Date d, int minutes) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MINUTE, minutes);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的秒数,可以为负
     * Adding the specified number of seconds to the given time is possible, including negative values.
     * @param d
     * @param seconds
     * @return 日期对象
     */
    public static Date addSeconds(Date d, int seconds) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.SECOND, seconds);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的毫秒数,可以为负
     * Adding the specified number of milliseconds to the given time can result in a negative value.
     * @param d
     * @param milliseconds
     * @return 日期对象
     */
    public static Date addMilliseconds(Date d, int milliseconds) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MILLISECOND, milliseconds);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的年份是新的给定的年份
     * Setting the year of a date object to a new given year.
     * @param d    需要设定的日期对象
     * @param year 新的年份
     * @return 日期对象
     */
    public static Date setYearOfDate(Date d, int year) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.YEAR, year);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的月份是新的给定的月份
     * Set the month of a date object to a new given month.
     * @param d     需要设定的日期对象
     * @param month 新的月份
     * @return 新日期对象
     */
    public static Date setMonthOfDate(Date d, int month) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MONTH, month);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的天是新的给定的天
     * Set the day of a date object to a new given day.
     * @param d   需要设定的日期对象
     * @param day 新的天
     * @return 新日期对象
     */
    public static Date setDayOfDate(Date d, int day) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.DAY_OF_MONTH, day);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的小时是新的给定的小时
     * Setting the hour of a date object to a new given hour.
     * @param d    需要设定的日期对象
     * @param hour 新的小时数
     * @return 新日期对象
     */
    public static Date setHourOfDate(Date d, int hour) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的分钟是新的给定的分钟数
     * Set the minutes of a date object to a new given minute value.
     * @param d      需要设定的日期对象
     * @param minute 新的分钟数
     * @return 新日期对象
     */
    public static Date setMinuteOfDate(Date d, int minute) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MINUTE, minute);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的秒数是新的给定的分钟数
     * Setting the seconds of a date object to the new given minute value.
     *
     * @param d      需要设定的日期对象
     * @param second 新的秒数
     * @return 新日期对象
     */
    public static Date setSecondOfDate(Date d, int second) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.SECOND, second);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的毫秒数是新的给定的分钟数
     * Setting the milliseconds of a date object to a new given minute value.
     * @param d           需要设定的日期对象
     * @param millisecond 新的毫秒数
     * @return 新日期对象
     */
    public static Date setMillisecondOfDate(Date d, int millisecond) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MILLISECOND, millisecond);
        return calendar.getTime();
    }
    /**
     * 返回指定日期的月份的天数量
     * Retrieve the number of days in the month of the specified date.
     * @param d 日期对象
     */
    public static int getDaysOfMonth(Date d) {
        int year = getYearOfDate(d);
        int month = getMonthOfYear(d);
        return getDaysOfMonth(year, month);
    }
    /**
     * 返回指定日期的月份的天数量
     * Retrieve the number of days in the month of the specified date.
     * @param year  年
     * @param month 月
     */
    public static int getDaysOfMonth(int year, int month) {
        int days = 0;
        if (month == 2) {
            if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
                days = 29;
            } else {
                days = 28;
            }
        }
        if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
            days = 30;
        }
        if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) {
            days = 31;
        }
        return days;
    }
    /**
     * 返回系统时间,以日期对象形式返回
     *
     * @return 日期对象
     */
    public static Date getSystemDate() {
        return new Date(System.currentTimeMillis());
    }
    /**
     * 返回系统时间,以毫秒形式返回
     *
     * @return 毫秒数
     */
    public static long getSystemTime() {
        return System.currentTimeMillis();
    }
    /**
     * 返回24小时前的时间
     *
     * @param date
     * @return
     */
    public static Date getLastDay(Date date) {
        long day = date.getTime();
        long lastDay = day - 24 * 60 * 60 * 1000;
        return new Date(lastDay);
    }
    /**
     * 返回24小时后的时间
     *
     * @param date
     * @return
     */
    public static Date getTomorrow(Date date) {
        long day = date.getTime();
        long tomorrow = day + 24 * 60 * 60 * 1000;
        return new Date(tomorrow);
    }
    /**
     * 取得30天前的这个时间
     *
     * @return
     */
    public static Date getDayLastMonth() {
        long day = new Date().getTime();
        long dayLastMonth = day - 24 * 60 * 60 * 1000 * 20;
        return new Date(dayLastMonth);
    }
    /**
     * 取得30天后的这个时间
     *
     * @return
     */
    public static Date getDayNextMonth() {
        long day = new Date().getTime();
        long dayNextMonth = day + 20 * 24 * 60 * 60 * 1000;
        return new Date(dayNextMonth);
    }
    public static int getMonthCount(Date sDate, Date eDate) {
        String sDateStr = DateTimeHelper.formatDateTimetoString(sDate, "MM");
        String eDateStr = DateTimeHelper.formatDateTimetoString(eDate, "MM");
        int monthCount = Integer.parseInt(eDateStr) - Integer.parseInt(sDateStr) + 1;
        return monthCount;
    }
    /**
     * 取得下个月的这天,比如2月1日可取得3月1日,此方法有很大局限性,不能用于月末的天数
     * Obtain the same day of the following month, for example, February 1st can obtain March 1st. This method has significant limitations and cannot be used for the last days of the month.
     * @param date
     * @return
     */
    public static Date getDayNextMonth(Date date) {
        String yearStr = DateTimeHelper.formatDateTimetoString(date, "yyyy");
        String monthStr = DateTimeHelper.formatDateTimetoString(date, "MM");
        String dayStr = DateTimeHelper.formatDateTimetoString(date, "dd");
        int year = Integer.parseInt(yearStr);
        int month = Integer.parseInt(monthStr);
        if (month == 12) {
            month = 1;
            year = year + 1;
            yearStr = String.valueOf(year);
            monthStr = String.valueOf(month);
        }
        String dateStr = yearStr + "-" + monthStr + "-" + dayStr;
        try {
            date = DateTimeHelper.parseToDate(dateStr);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 获取当月开始时0点0分0秒
     *
     * @return
     */
    public static Date getCurrentMouthStart() {
        Date d = getSystemDate();
        d = setDayOfDate(d, 1);
        d = setHourOfDate(d, 0);
        d = setMinuteOfDate(d, 0);
        d = setSecondOfDate(d, 0);
        return d;
    }
    /**
     * 返回下月的这天
     *
     * @param date
     * @return
     */
    public static Date getDateNextMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, +1);
        return cal.getTime();
    }
    /**
     * 根据时间获取和当前时间的差距.
     * Obtain the difference between the current time and the time in question.
     * @param date - 待比较实际
     * @return 时间差距字符串
     */
    public static String getPassdTime(Date date) {
        if (null == date) {
            return null;
        }
        String ret = null;
        // 计算和当前相差秒数
        // Calculate the difference in seconds from the current time.
        long currentTimeMillis = System.currentTimeMillis();
        long timeDiff = (currentTimeMillis - date.getTime());
        int seconds = (int) (timeDiff / 1000);
        int minutes = seconds / 60;
        int hours = minutes / 60;
        int days = hours / 24;
        int months = days / 30;
        if (days <= 7) {
            if (days != 0) {
                ret = days + "天前";
            } else if (hours != 0) {
                ret = hours + "小时前";
            } else if (minutes != 0) {
                ret = minutes + "分钟前";
            } else {
                ret = "刚刚";
            }
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss");
            ret = sdf.format(date);
        }
        return ret;
    }
    /**
     * 获取当前日期后几天的日期
     * Obtaining the date of the day after several days from the current date.
     * @param day 天数
     * @return
     */
    public static Date getCurrentNextDays(int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, day);
        Date date = calendar.getTime();
        return date;
    }
    public static String getCurrentStringDate() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = simpleDateFormat.format(new Date());
        return dateString;
    }
    /**
     * 获取当前日期是星期几<br>
     * Obtain the day of the week for the current date.
     * @param dt
     * @return 当前日期是星期几
     */
    public static String getWeekOfDate(Date dt) {
        String[] weekDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0) {
            w = 0;
        }
        return weekDays[w];
    }
    /**
     * 获取今天时间 2017-11-20 00:00:00
     */
    public static Date todayDate() {
        try {
            String date = formatDatetoString(new Date());
            String todayString = date + " 00:00:00";
            return parseToDate(todayString, FMT_yyyyMMdd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Date();
    }
    /**
     * 获取指定日期的 时间 2017-11-20 00:00:00
     *
     * @param date
     * @return
     */
    public static Date createDate(Date date) {
        try {
            String dates = formatDatetoString(date);
            String todayString = dates + " 00:00:00";
            return parseToDate(todayString, FMT_yyyyMMdd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Date();
    }
    public static String createDateTime(Date date) {
        try {
            String dates = formatDatetoString(date);
            String time = DateTimeHelper.formatDateTimetoString(new Date(), FMT_HHmmss);
            String todayString = dates + " " + time;
            return todayString;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    /**
     * @param time
     * @return
     */
    public static String getTimeHint(Date time) {
        String hint = "";
        double minutes = DateTimeHelper.getMinutesOfTwoDate(new Date(), time);
        double hours = DateTimeHelper.getHoursOfTwoDate(new Date(), time);
        double days = DateTimeHelper.getDaysOfTwoDate(new Date(), time);
        if (minutes < 1) {
            hint = "刚刚";
        } else if (hours < 1) {
            hint = new Double(minutes).intValue() + "分钟前";
        } else if (days < 1) {
            hint = new Double(hours).intValue() + "小时前";
        } else if (days < 7) {
            hint = new Double(days).intValue() + "天前";
        } else {
            hint = DateTimeHelper.formatDateTimetoString(time, DateTimeHelper.FMT_yyyyMMdd);
        }
        return hint;
    }
    /**
     * 根据时间获取和当前时间的差距.
     * Obtain the difference between the current time and the time in question.
     * @param date - 待比较实际
     * @return 时间差距字符串
     */
    public static String getLoginTime(Date date) {
        if (null == date) {
            return null;
        }
        String ret = null;
        // 计算和当前相差秒数
        //Calculate the difference in seconds from the current time.
        long currentTimeMillis = System.currentTimeMillis();
        long timeDiff = (currentTimeMillis - date.getTime());
        int seconds = (int) (timeDiff / 1000);
        int minutes = seconds / 60;
        int hours = minutes / 60;
        int days = hours / 24;
        int months = days / 30;
        if (months != 0) {
            ret = "1个月前";
        } else if (days != 0) {
            ret = days + "天前";
        } else if (hours != 0) {
            ret = hours + "小时前";
        } else if (minutes != 0) {
            ret = minutes + "分钟前";
        } else {
            ret = "刚刚";
        }
        return ret;
    }
    public static Date getWXTime() {
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        Date date = calendar.getTime();
        return date;
    }
    /**
     * 是否是同一天
     * it the same day
     * @param first
     * @param second
     * @return
     */
    public static Boolean isSameDay(Date first, Date second) {
        if (first == null || second == null) {
            return false;
        }
        int day1 = getDayOfYear(first);
        int day2 = getDayOfYear(second);
        if (day1 != day2) {
            return false;
        }
        return true;
    }
    /**
     * 是否超过指定时刻
     * Has the specified time limit been exceeded
     * @param day  时间
     * @param time 指定时刻
     * @return
     */
    public static Boolean expireDayTime(Date day, Integer time) {
        if (null == day) {
            return false;
        }
        try {
            String dates = formatDatetoString(day);
            String timeHour = "";
            for (int i = 0; i <= 23; i++) {
                if (i == time) {
                    if (i < 10) {
                        timeHour += " 0" + time + ":00:00";
                    } else if (i < 23) {
                        timeHour += " " + time + ":00:00";
                    } else {
                        timeHour += " 00" + time + ":00:00";
                    }
                }
            }
            String todayString = dates + timeHour;
            Date esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss);
            if (DateTimeHelper.compareTwoDate(day, esDayTime) != 1) {
                int i = compareTwoDate(day, esDayTime);
                System.out.println(i);
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return false;
    }
    /**
     * 指定一天哪一个小时
     * Specify which hour of a particular day.
     * @param time
     * @return
     */
    public static Date createDayTime(Integer time) {
        String dates = formatDatetoString(new Date());
        String timeHour = "";
        for (int i = 0; i <= 23; i++) {
            if (i == time) {
                if (i < 10) {
                    timeHour += " 0" + time + ":00:00";
                } else if (i < 23) {
                    timeHour += " " + time + ":00:00";
                } else {
                    timeHour += " 00" + time + ":00:00";
                }
            }
        }
        String todayString = dates + timeHour;
        Date esDayTime = new Date();
        try {
            esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return esDayTime;
    }
    /**
     * 数字换算成中文(周)
     * Conversion of numbers to Chinese (weeks)
     * @param time
     * @return
     */
    public static String getWeekString(Integer time) {
        if (time == 1) {
            return "一";
        } else if (time == 2) {
            return "二";
        } else if (time == 3) {
            return "三";
        } else if (time == 4) {
            return "四";
        } else if (time == 5) {
            return "五";
        } else if (time == 6) {
            return "六";
        } else if (time == 0 || time == 7) {
            return "日";
        }
        return null;
    }
    /**
     * LocalDateTime -> Date
     *
     * @param localDateTime
     * @return
     */
    public static Date asDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }
    /**
     * Date -> LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDateTime asLocalDateTime(Date date) {
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
    }
    /**
     * 获取两个时间的间隔(秒)
     * Obtain the time difference between two instances (in seconds).
     * @param d1
     * @param d2
     * @return
     */
    public static long getDateBetween(Date d1, Date d2) {
        return Math.abs((d1.getTime() - d2.getTime()) / 1000);//取绝对值
    }
    /**
     * @param date
     * @return 获取今天最后的时间
     * Obtain the final time of today.
     */
    public static Date getEndDate(Date date) {
        if (date == null) {
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        return c.getTime();
    }
    /**
     * 日期天数差
     * Days Difference
     */
    public static int daysBetween(Date today, Date endDate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        today = sdf.parse(sdf.format(today));
        endDate = sdf.parse(sdf.format(endDate));
        Calendar cal = Calendar.getInstance();
        cal.setTime(today);
        long time1 = cal.getTimeInMillis();
        cal.setTime(endDate);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);
        return Integer.parseInt(String.valueOf(between_days));
    }
    /**
     * 获取到当月所有日期
     * Obtain all dates of the current month
     * @param date
     * @return
     */
    public static List<Date> getAllTheDateOftheMonth(Date date) {
        List<Date> list = new ArrayList<Date>();
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DATE, 1);
        int month = cal.get(Calendar.MONTH);
        while (cal.get(Calendar.MONTH) == month) {
            list.add(cal.getTime());
            cal.add(Calendar.DATE, 1);
        }
        return list;
    }
    /*public static void main(String[] args) throws ParseException {
        List<Date> allTheDateOftheMonth = getAllTheDateOftheMonth(new Date());
        Date date = allTheDateOftheMonth.get(11);
        System.out.println(date.toLocaleString());
        int i = daysBetween(new Date(), date);
        System.out.println(i);
    }*/
}
cloud-server-activity/src/main/java/com/dsh/activity/util/DateUtil.java
New file
@@ -0,0 +1,332 @@
/**
 * Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.dsh.activity.util;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
import java.util.TimeZone;
public class DateUtil {
    private static TimeZone tz = TimeZone.getTimeZone("GMT+8");
    /**
     * 获取YYYY格式
     */
    public static String getYear() {
        return formatDate(new Date(), "yyyy");
    }
    /**
     * 获取YYYY格式
     */
    public static String getYear(Date date) {
        return formatDate(date, "yyyy");
    }
    /**
     * 获取YYYY-MM-DD格式
     */
    public static String getDay() {
        return formatDate(new Date(), "yyyy-MM-dd");
    }
    /**
     * 获取YYYY-MM-DD格式
     */
    public static String getDay(Date date) {
        return formatDate(date, "yyyy-MM-dd");
    }
    /**
     * 获取YYYYMMDD格式
     */
    public static String getDays() {
        return formatDate(new Date(), "yyyyMMdd");
    }
    /**
     * 获取YYYYMMDD格式
     */
    public static String getDays(Date date) {
        return formatDate(date, "yyyyMMdd");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss格式
     */
    public static String getTime() {
        return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss.SSS格式
     */
    public static String getMsTime() {
        return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
    }
    /**
     * 获取YYYYMMDDHHmmss格式
     */
    public static String getAllTime() {
        return formatDate(new Date(), "yyyyMMddHHmmss");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss格式
     */
    public static String getTime(Date date) {
        return formatDate(date, "yyyy-MM-dd HH:mm:ss");
    }
    public static String formatDate(Date date, String pattern) {
        String formatDate = null;
        if (StringUtils.isNotBlank(pattern)) {
            formatDate = DateFormatUtils.format(date, pattern);
        } else {
            formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
        }
        return formatDate;
    }
    /**
     * 日期比较,如果s>=e 返回true 否则返回false)
     *
     * @author luguosui
     */
    public static boolean compareDate(String s, String e) {
        if (parseDate(s) == null || parseDate(e) == null) {
            return false;
        }
        return parseDate(s).getTime() >= parseDate(e).getTime();
    }
    /**
     * 格式化日期
     */
    public static Date parseDate(String date) {
        return parse(date, "yyyy-MM-dd");
    }
    /**
     * 格式化日期
     */
    public static Date parseTimeMinutes(String date) {
        return parse(date, "yyyy-MM-dd HH:mm");
    }
    /**
     * 格式化日期
     */
    public static Date parseTime(String date) {
        return parse(date, "yyyy-MM-dd HH:mm:ss");
    }
    /**
     * 格式化日期
     */
    public static Date parse(String date, String pattern) {
        try {
            if(Objects.nonNull(date)) {
                return DateUtils.parseDate(date, pattern);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 格式化日期
     */
    public static String format(Date date, String pattern) {
        return DateFormatUtils.format(date, pattern);
    }
    /**
     * 把日期转换为Timestamp
     */
    public static Timestamp format(Date date) {
        return new Timestamp(date.getTime());
    }
    /**
     * 校验日期是否合法
     */
    public static boolean isValidDate(String s) {
        return parse(s, "yyyy-MM-dd HH:mm:ss") != null;
    }
    /**
     * 校验日期是否合法
     */
    public static boolean isValidDate(String s, String pattern) {
        return parse(s, pattern) != null;
    }
    public static int getDiffYear(String startTime, String endTime) {
        DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
        try {
            int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse(
                    startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365);
            return years;
        } catch (Exception e) {
            // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
            return 0;
        }
    }
    /**
     * <li>功能描述:时间相减得到天数
     */
    public static long getDaySub(String beginDateStr, String endDateStr) {
        long day = 0;
        SimpleDateFormat format = new SimpleDateFormat(
                "yyyy-MM-dd");
        Date beginDate = null;
        Date endDate = null;
        try {
            beginDate = format.parse(beginDateStr);
            endDate = format.parse(endDateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
        // System.out.println("相隔的天数="+day);
        return day;
    }
    /**
     * 得到n天之后的日期
     */
    public static String getAfterDayDate(String days) {
        int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sdfd.format(date);
        return dateStr;
    }
    /**
     * 得到n天之后是周几
     */
    public static String getAfterDayWeek(String days) {
        int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("E");
        String dateStr = sdf.format(date);
        return dateStr;
    }
    /**
     * 得到系统日期
     *
     * @return
     */
    public static Date getDate() {
        TimeZone.setDefault(tz);
        return new Date();
    }
    /**
     * 获取当前毫秒数
     *
     * @return long
     */
    public static long getCurMilli() {
        long millisecond = 0;
        Calendar cal = Calendar.getInstance();
        millisecond = cal.getTimeInMillis();
        return millisecond;
    }
    /**
     * 得到系统Calendar日期
     *
     * @return
     */
    public static Calendar getCalendar() {
        TimeZone.setDefault(tz);
        Calendar cal = Calendar.getInstance();
        return cal;
    }
    /**
     * 毫秒转日期时间
     *
     * @param millisecond
     * @return
     */
    public static String getDateTime(long millisecond) {
        if (millisecond == 0) {
            millisecond = getCurMilli();
        }
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar = getCalendar();
        calendar.setTimeInMillis(millisecond);
        return dateformat.format(calendar.getTime());
    }
    /**
     * 日期转毫秒(加分钟)
     *
     * @param date
     * @return
     */
    public static long getMillisecond_fz(String date, Integer day) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if ("".equals(date)) {
            newDate = sdf.format(DateUtil.getDate());
        } else {
            newDate = getDateTime(Long.parseLong(date));
        }
        Date dt = null;
        try {
            dt = sdf.parse(newDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.MINUTE, day);
        Date dt1 = rightNow.getTime();
        return dt1.getTime();
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/DoubleUtil.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.util;
import java.math.BigDecimal;
/**
 * Double文档
 */
public class DoubleUtil {
    public static Double format(Double num) {
        BigDecimal b = new BigDecimal(num);
        num = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return num;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/EmojiUtil.java
New file
@@ -0,0 +1,95 @@
package com.dsh.activity.util;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmojiUtil {
    /**
     * 编码
     *
     * @param str 待转换字符串
     * @return 转换后字符串
     * @throws UnsupportedEncodingException exception
     * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集)
     */
    public static String emojiEncode(String str)
            throws UnsupportedEncodingException {
        String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(
                        sb,
                        "[["
                                + URLEncoder.encode(matcher.group(1),
                                "UTF-8") + "]]");
            } catch (UnsupportedEncodingException e) {
//                LOG.error("emojiConvert error", e);
                throw e;
            }
        }
        matcher.appendTail(sb);
//        LOG.debug("emojiConvert " + str + " to " + sb.toString()
//                + ", len:" + sb.length());
        return sb.toString();
    }
    /**
     * 解码
     *
     * @param str 转换后的字符串
     * @return 转换前的字符串
     * @throws UnsupportedEncodingException exception
     * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串
     */
    public static String emojiDecode(String str)
            throws UnsupportedEncodingException {
        String patternString = "\\[\\[(.*?)\\]\\]";
        Pattern pattern = Pattern.compile(patternString);
        if (str == null) {
            return str;
        }
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(sb,
                        URLDecoder.decode(matcher.group(1), "UTF-8"));
            } catch (UnsupportedEncodingException e) {
//                LOG.error("emojiRecovery error", e);
                throw e;
            }
        }
        matcher.appendTail(sb);
//        LOG.debug("emojiRecovery " + str + " to " + sb.toString());
//        System.out.println("emojiRecovery " + str + " to " + sb.toString());
        return sb.toString();
    }
    /**
     * @param str 待过滤字符串
     * @return 过滤后字符串
     * exception
     * @Description 将字符串中的emoji表情过滤掉
     */
    public static String emojiSub(String str) {
        String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "");
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/HeaderAuthUtil.java
New file
@@ -0,0 +1,20 @@
package com.dsh.activity.util;
import javax.servlet.http.HttpServletRequest;
public class HeaderAuthUtil {
    /**
     * 用户UserId变量
     */
    protected final static String HEADER_USERID = "userId";
    /**
     * 获取Request请求头UserId
     * @return
     */
    public static String getLoginAuthUserId (HttpServletRequest request) {
        String userId = request.getHeader(HEADER_USERID);
        return userId;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/JsonUtil.java
New file
@@ -0,0 +1,157 @@
package com.dsh.activity.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 *
 * 返回json数据封装工具类
 *
 * @ClassName: JsonUtil
 * @author: yuds
 * @date: 2019-09-20 09:19:27
 * @version: V1.0.0
 */
public class JsonUtil {
    /**
     * <li>将对象转化为json输出
     * <li>QuoteFieldNames ———-输出key时是否使用双引号,默认为true
     * <li>WriteMapNullValue ——–是否输出值为null的字段,默认为false
     * <li>WriteNullNumberAsZero —-数值字段如果为null,输出为0,而非null
     * <li>WriteNullListAsEmpty —–List字段如果为null,输出为[],而非null
     * <li>WriteNullStringAsEmpty —字符类型字段如果为null,输出为”“,而非null
     * <li>WriteNullBooleanAsFalse –Boolean字段如果为null,输出为false,而非null
     * <li>DisableCircularReferenceDetect 禁止循环引用检测
     */
    private static SerializerFeature[] serializerFeaturess = { SerializerFeature.WriteMapNullValue,
            SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullListAsEmpty,
            SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullBooleanAsFalse,
            SerializerFeature.DisableCircularReferenceDetect, };
    private JsonUtil() {
    }
    /**
     * fastJson Object转json
     *
     * @param obj
     * @return
     */
    public static String objToJson(Object obj) {
        return JSON.toJSONString(obj, serializerFeaturess);
    }
    /**
     * fastJson Object转json
     *
     * @param obj
     * @param dateFormat 时间格式化
     * @return
     */
    public static String objToJson(Object obj, String dateFormat) {
        return JSON.toJSONStringWithDateFormat(obj, dateFormat, serializerFeaturess);
    }
    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();
    /**
     * 将对象转换成json字符串。
     * <p>
     * Title: pojoToJson
     * </p>
     * <p>
     * Description:
     * </p>
     *
     * @param data
     * @return
     */
    public static String objectToJson(Object data) {
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            MAPPER.setDateFormat(fmt);
            String string = MAPPER.writeValueAsString(data);
            return string;
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 将json结果集转化为对象
     *
     * @param jsonData json数据
     * @param beanType    对象中的object类型
     * @return
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        try {
            T t = MAPPER.readValue(jsonData, beanType);
            return t;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 将json数据转换成pojo对象list
     * <p>
     * Title: jsonToList
     * </p>
     * <p>
     * Description:
     * </p>
     *
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
        try {
            List<T> list = MAPPER.readValue(jsonData, javaType);
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static JsonNode jsonToNode(String jsonData) {
        try {
            return MAPPER.readTree(jsonData);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
    public static Map<String, String> jsonToMap(String json) {
        JsonNode nodes = jsonToNode(json);
        Iterator<Map.Entry<String, JsonNode>> fields = nodes.fields();
        Map<String, String> map = new HashMap<>();
        while (fields.hasNext()) {
            Map.Entry<String, JsonNode> next = fields.next();
            String value = next.getValue().asText("");
            map.put(next.getKey(), value);
        }
        return map;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/LocalDateTimeUtils.java
New file
@@ -0,0 +1,80 @@
package com.dsh.activity.util;
import java.text.ParseException;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * LocalDateTimeUtils
 * LocalDateTime 时间工具
 *
 * @author yudeshan
 * @version V1.0
 */
public class LocalDateTimeUtils {
    private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 };
    private final static String[] constellationArr = new String[] { "摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" };
    /**
     * 取两个时间相差毫秒数
     *
     * @param start 开始时间
     * @param end   结束时间
     * @return
     */
    public static long betweenMillis(LocalDateTime start, LocalDateTime end) {
        Duration duration = Duration.between(start, end);
        return duration.toMillis();
    }
    /**
     * 通过生日计算年龄
     * @param birthDay 生日
     * @return
     * @throws ParseException
     */
    public static int getAgeByBirth(LocalDate birthDay) throws ParseException {
        int age = 0;
       //出生日期晚于当前时间,无法计算
        LocalDate now=LocalDate.now();
        if (birthDay.isAfter(now)) {
            throw new IllegalArgumentException( "生日大于当前时间!");
        }
        //当前年份
        int yearNow = now.getYear();
        //当前月份
        int monthNow = now.getMonthValue();
        //当前日期
        int dayOfMonthNow = now.getDayOfMonth();
        int yearBirth =birthDay.getYear();
        int monthBirth = birthDay.getMonthValue();
        int dayOfMonthBirth = birthDay.getDayOfMonth();
        //计算整岁数
        age = yearNow - yearBirth;
        if (monthNow <= monthBirth) {
            if (monthNow == monthBirth) {
                if (dayOfMonthNow < dayOfMonthBirth){
                    //当前日期在生日之前,年龄减一
                    age--;
                }
            } else {
                //当前月份在生日之前,年龄减一
                age--;
            }
        }
        return age;
    }
    /**
     * 根据月份计算星座
     */
    public static String getConstellation(LocalDate date) {
        Integer month=date.getMonthValue();
        Integer day=date.getDayOfMonth();
        return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month];
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/MessageUtils.java
New file
@@ -0,0 +1,26 @@
package com.dsh.activity.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
@Component
public class MessageUtils {
    @Autowired
    private MessageSource messageSource;
    /**
     * 根据消息键和参数 获取消息 委托给spring messageSource
     *
     * @param code 消息键
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public String get(String code, Object... args) {
        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/RedisUtil.java
New file
@@ -0,0 +1,127 @@
package com.dsh.activity.util;
import com.alibaba.csp.sentinel.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 * Redis工具类
 */
@Component
public class RedisUtil {
    @Autowired
    private JedisPool jedisPool;
    /**
     * 向redis中存储字符串没有过期时间
     * Storing strings in Redis without an expiration time.
     * @param key
     * @param value
     */
    public void setStrValue(String key, String value){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String set = resource.set(key, value);
            closeJedis(resource);
        }
    }
    /**
     * 以分钟为单位设置存储值(设置过期时间)
     * Set storage value in minutes (set expiration time) as units.
     * @param key
     * @param value
     * @param time 秒
     */
    public void setStrValue(String key, String value, int time){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String setex = resource.setex(key, time, value);
            closeJedis(resource);
        }
    }
    /**
     * 从redis中获取值
     * @param key
     * @return
     */
    public String getValue(String key){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String data = resource.get(key);
            closeJedis(resource);
            return data;
        }
        return null;
    }
    /**
     * 批量获取
     * @param kes
     * @return
     */
    public List<Object> getValues(List<String> kes){
        if(null != kes){
            Jedis resource = jedisPool.getResource();
            Pipeline pipelined = resource.pipelined();
            for(String key : kes){
                pipelined.get(key);
            }
            List<Object> list = pipelined.syncAndReturnAll();
            closeJedis(resource);
            pipelined.clear();
            try {
                pipelined.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            List<Object> data = new ArrayList<>();
            for(Object o : list){
                if(null != o){
                    data.add(o);
                }
            }
            return data;
        }
        return null;
    }
    /**
     * 删除key
     * @param key
     */
    public void remove(String key){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            Long del = resource.del(key);
            closeJedis(resource);
        }
    }
    /**
     * 删除资源
     * @param jedis
     */
    public void closeJedis(Jedis jedis){
        if(null != jedis){
            jedis.close();
        }
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/ResultUtil.java
New file
@@ -0,0 +1,191 @@
package com.dsh.activity.util;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * 定义统一返回对象
 */
@ApiModel(value = "统一返回结果集")
public class ResultUtil<T> {
    public static final Integer SUCCESS = 200;
    public static final Integer PARAM_ERROR = 300;
    public static final Integer RUNTIME_ERROR = 400;
    public static final Integer ERROR = 500;
    public static final Integer TOKEN_ERROR = 600;
    public static final Integer SIGN_ERROR = 700;
    public static final String Token = "TOKEN_INVALID";
    public static final String SIGN = "SIGN_INVALID";
    @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效")
    private Integer code;//备用状态码
    @ApiModelProperty(name = "msg", value = "返回结果说明")
    private String msg;//返回说明
    @ApiModelProperty(name = "data", value = "返回结果值")
    private T data;//返回数据
    public String getMsg() {
        return msg;
    }
    public T getData() {
        return data;
    }
    public Integer getCode() {
        return code;
    }
    private ResultUtil(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    private ResultUtil(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg){
        return new ResultUtil<>(code, msg);
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){
        return new ResultUtil<>(code, msg, data);
    }
    /**
     * 错误信息
     * @return
     */
    public static ResultUtil error(String mag){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, new JSONObject());
    }
    /**
     * 错误信息
     * @return
     */
    public static <T> ResultUtil <T> error(String mag, T obj){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, obj);
    }
    /**
     * token失效
     * @return
     */
    public static ResultUtil tokenErr(){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new JSONObject());
    }
    /**
     * token失效
     * @return
     */
    public static ResultUtil tokenErr(String msg){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new JSONObject());
    }
    /**
     * 参数异常
     * @return
     */
    public static  ResultUtil paranErr(){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new JSONObject());
    }
    /**
     * 参数异常
     * @return
     */
    public static <T> ResultUtil<T> paranErr(T data){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    @Autowired
    private static MessageUtils messageUtils;
    /**
     * 运行异常
     * @return
     */
    public static ResultUtil runErr(){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new JSONObject());
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data, String msg){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data);
    }
    /**
     * 返回成功
     * @param
     * @return
     */
    public static ResultUtil success(){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new JSONObject());
    }
    /**
     * 返回成功
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data);
    }
    /**
     * 返回成功
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(String msg, T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data);
    }
    /**
     * 签名无效
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> sign(){
        return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN);
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/StrUtils.java
New file
@@ -0,0 +1,102 @@
package com.dsh.activity.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class StrUtils {
    /**
     * 把逗号分隔的字符串转换字符串数组
     * Convert comma-separated string to string array.
     * @param str
     * @return
     */
    public static String[] splitStr2StrArr(String str,String split) {
        if (str != null && !str.equals("")) {
            return str.split(split);
        }
        return null;
    }
    /**
     * 把逗号分隔字符串转换List的Long
     *
     * @param str
     * @return
     */
    public static List<Long> splitStr2LongArr(String str) {
        String[] strings = splitStr2StrArr(str,",");
        if (strings == null) return null;
        List<Long> result = new ArrayList<>();
        for (String string : strings) {
            result.add(Long.parseLong(string));
        }
        return result;
    }
    /**
     * 把逗号分隔字符串转换List的Long
     *
     * @param str
     * @return
     */
    public static List<Long> splitStr2LongArr(String str,String split) {
        String[] strings = splitStr2StrArr(str,split);
        if (strings == null) return null;
        List<Long> result = new ArrayList<>();
        for (String string : strings) {
            result.add(Long.parseLong(string));
        }
        return result;
    }
    public static String getRandomString(int length) {
        String str = "0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(10);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String getComplexRandomString(int length) {
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(62);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String getClassCodeString(int length) {
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number =random.nextInt(36);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String convertPropertiesToHtml(String properties){
        //1:容量:6:32GB_4:样式:12:塑料壳
        StringBuilder sBuilder = new StringBuilder();
        String[] propArr = properties.split("_");
        for (String props : propArr) {
            String[] valueArr = props.split(":");
            sBuilder.append(valueArr[1]).append(":").append(valueArr[3]).append("<br>");
        }
        return sBuilder.toString();
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/StringUtil.java
New file
@@ -0,0 +1,25 @@
package com.dsh.activity.util;
import cn.mb.cloud.common.core.exception.BusinessException;
import org.springframework.util.StringUtils;
/**
 * 判断字符串不能为空和null,以及号码格式效验,
 * 否则则抛出异常信息
 */
public class StringUtil {
    private StringUtil() {
    }
    public static void checkNull(String str, String message) throws BusinessException {
        if (!StringUtils.hasLength(str)) {
            throw new BusinessException(message);
        }
    }
    public static void checkFormat(String str, String message) throws BusinessException {
        if (!str.matches("^1[2|3|4|5|6|7|8|9][0-9]{9}$")) {
            throw new BusinessException(message);
        }
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/StudyTimeUtil.java
New file
@@ -0,0 +1,37 @@
package com.dsh.activity.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
//根据当前传入的时间,返回距离当前时间多少天
public class StudyTimeUtil {
    private StudyTimeUtil() {
    }
    /**
     * 获取两个时间的间隔(秒)Obtain the time difference between two instances (in seconds).
     *
     * @param startDate 开始的时间
     * @return 返回当前时间与开始时间的相差天数
     */
    public static int getDateBetween(Date startDate) throws ParseException {
        Date endDate = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        long startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime();
        long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime();
        int days = (int)((endDateTime - startDateTime)  / (1000 * 3600 * 24));
        return days;
    }
    public static Date getStartDate(LocalDateTime localDate) {
        Date date = Date.from(localDate.atZone(ZoneId.systemDefault()).toInstant());
        return date;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/TokenUtil.java
New file
@@ -0,0 +1,32 @@
package com.dsh.activity.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public class TokenUtil {
    @Autowired
    private RedisUtil redisUtil;
    public Integer getUserIdFormRedis(HttpServletRequest request) throws Exception {
        String requestHeader = request.getHeader("Authorization");
        if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
            requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1);
            String key = null;
            int length = requestHeader.length();
            if(length > 32){
                key = requestHeader.substring(length - 32);
            }else{
                key = requestHeader;
            }
            String value = redisUtil.getValue(key);
            return null != value ? Integer.valueOf(value) : null;
        }else{
            return null;
        }
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/Auth.java
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/Base64Utils.java
New file
@@ -0,0 +1,48 @@
package com.dsh.activity.util.akeylogin;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Utils {
    private static final Charset DEFAULT_CHARSET;
    public Base64Utils() {
    }
    public static byte[] encode(byte[] src) {
        return src.length == 0 ? src : Base64.getEncoder().encode(src);
    }
    public static byte[] decode(byte[] src) {
        return src.length == 0 ? src : Base64.getDecoder().decode(src);
    }
    public static byte[] encodeUrlSafe(byte[] src) {
        return src.length == 0 ? src : Base64.getUrlEncoder().encode(src);
    }
    public static byte[] decodeUrlSafe(byte[] src) {
        return src.length == 0 ? src : Base64.getUrlDecoder().decode(src);
    }
    public static String encodeToString(byte[] src) {
        return src.length == 0 ? "" : new String(encode(src), DEFAULT_CHARSET);
    }
    public static byte[] decodeFromString(String src) {
        return src.isEmpty() ? new byte[0] : decode(src.getBytes(DEFAULT_CHARSET));
    }
    public static String encodeToUrlSafeString(byte[] src) {
        return new String(encodeUrlSafe(src), DEFAULT_CHARSET);
    }
    public static byte[] decodeFromUrlSafeString(String src) {
        return decodeUrlSafe(src.getBytes(DEFAULT_CHARSET));
    }
    static {
        DEFAULT_CHARSET = StandardCharsets.UTF_8;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/BaseUtils.java
New file
@@ -0,0 +1,23 @@
package com.dsh.activity.util.akeylogin;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
public class BaseUtils {
    public static boolean isEmpty(Object target) {
        if (target == null) {
            return true;
        }
        if (target instanceof String && "".equals(target)) {
            return true;
        } else if (target instanceof Collection) {
            return ((Collection<?>) target).isEmpty();
        } else if (target instanceof Map) {
            return ((Map<?, ?>) target).isEmpty();
        } else if (target.getClass().isArray()) {
            return Array.getLength(target) == 0;
        }
        return false;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/DES.java
New file
@@ -0,0 +1,90 @@
package com.dsh.activity.util.akeylogin;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
public class DES {
    public static final String ALGORITHM = "DES";
    public static final String PADDING = "DES/CBC/PKCS5Padding";
    private static final byte[] DEFAULT_INITIALIZATION_VECTOR = ("00000000".getBytes());
    private String padding = PADDING;
    private byte[] initializationVectorBytes = DEFAULT_INITIALIZATION_VECTOR;
    private AlgorithmParameterSpec paramSpec;
    public DES() {
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(String padding) {
        this.padding = padding;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(String padding, byte[] initializationVectorBytes) {
        this.padding = padding;
        this.initializationVectorBytes = initializationVectorBytes;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(byte[] initializationVectorBytes) {
        this.initializationVectorBytes = initializationVectorBytes;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public byte[] encodeBytes(byte[] data, byte[] key) throws Exception {
        Key secretKey = getKey(key);
        Cipher cipher = Cipher.getInstance(padding);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec);
        byte[] bytes = cipher.doFinal(data);
        return bytes;
    }
    public byte[] decodeBytes(byte[] data, byte[] key) throws Exception {
        Key secretKey = getKey(key);
        Cipher cipher = Cipher.getInstance(padding);
        cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);
        return cipher.doFinal(data);
    }
    public String getPadding() {
        return padding;
    }
    public byte[] getInitializationVectorBytes() {
        return initializationVectorBytes;
    }
    private static Key getKey(byte[] key) throws Exception {
        DESKeySpec dks = new DESKeySpec(key);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
        SecretKey secretKey = keyFactory.generateSecret(dks);
        return secretKey;
    }
    public static byte[] decode(byte[] data, byte[] key) throws Exception {
        return decode(data, key, DEFAULT_INITIALIZATION_VECTOR);
    }
    public static byte[] encode(byte[] data, byte[] key) throws Exception {
        return encode(data, key, DEFAULT_INITIALIZATION_VECTOR);
    }
    public static byte[] decode(byte[] data, byte[] key, byte[] ivBytes) throws Exception {
        DES des = new DES(PADDING, ivBytes);
        return des.decodeBytes(data, key);
    }
    public static byte[] encode(byte[] data, byte[] key, byte[] ivBytes) throws Exception {
        DES des = new DES(PADDING, ivBytes);
        return des.encodeBytes(data, key);
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/LoginUtil.java
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/Md5Util.java
New file
@@ -0,0 +1,48 @@
package com.dsh.activity.util.akeylogin;
import java.security.MessageDigest;
public class Md5Util {
    private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    /**
     * MD5加密
     *
     * @param origin      字符
     * @param charsetname 编码
     * @return
     */
    public static String MD5Encode(String origin, String charsetname) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (null == charsetname || "".equals(charsetname)) {
                resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
            } else {
                resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
            }
        } catch (Exception e) {
        }
        return resultString;
    }
    public static String byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }
    public static String byteToHexString(byte b) {
        int n = b;
        if (n < 0) {
            n += 256;
        }
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigIts[d1] + hexDigIts[d2];
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/util/akeylogin/SignUtil.java
New file
@@ -0,0 +1,24 @@
package com.dsh.activity.util.akeylogin;
import java.util.Map;
import java.util.TreeMap;
public class SignUtil {
    private static String charset = "utf8";
    public static String getSign(Map<String, Object> data, String secret) {
        if (data == null) {
            return null;
        }
        //排序参数
        Map<String, Object> mappingList = new TreeMap<>(data);
        StringBuilder plainText= new StringBuilder();
        mappingList.forEach((k, v) -> {
            if (!"sign".equals(k) && !BaseUtils.isEmpty(v)) {
                plainText.append(String.format("%s=%s&", k, v));
            }
        });
        String substring = plainText.substring(0, plainText.length() - 1);
        return Md5Util.MD5Encode(substring + secret, charset);
    }
}
cloud-server-activity/src/main/java/com/dsh/course/advice/ControllerException.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/DateTimeHelper.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/DateUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/DoubleUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/EmojiUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/HeaderAuthUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/JsonUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/MessageUtils.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/RedisUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/ResultUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/StrUtils.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/StringUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/StudyTimeUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/TokenUtil.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/akeylogin/Base64Utils.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/akeylogin/BaseUtils.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/akeylogin/DES.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/akeylogin/Md5Util.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/course/util/akeylogin/SignUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/competition/advice/ControllerException.java
New file
@@ -0,0 +1,45 @@
package com.dsh.competition.advice;
import cn.mb.cloud.common.core.constant.enums.ErrorCodeConstants;
import cn.mb.cloud.common.core.exception.BusinessException;
import cn.mb.cloud.common.core.util.ResponseData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestControllerAdvice
public class ControllerException {
    @ExceptionHandler(BusinessException.class)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public ResponseData bussiness(BusinessException e) {
        log.error("业务异常 message= " + e.getMessage() + " code= " + e.getErrorCode(), e);
        return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).
                msg(e.getMessage()).build();
    }
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public ResponseData runtimeException(RuntimeException e) {
        log.error("运行时异常信息" + e.getMessage(), e);
        return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).msg(e.getMessage()).build();
    }
    /**
     * 全局异常.
     *
     * @param e the e
     * @return R
     */
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public ResponseData exception(Exception e) {
        log.error("全局异常信息" + e.getMessage(), e);
        return ResponseData.fail();
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/DateTimeHelper.java
New file
@@ -0,0 +1,1769 @@
package com.dsh.competition.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
/**
 * 日期时间类型的工具类,提供对日期和时间基于毫秒及以上精度的格式化方法、
 * 运算方法、比较方法等。注意:大部分对日期对象(java.util.Date)操作的方法,
 * 不会修改原日期对象,而以一个新的日期对象返回。
 * <p>
 * <p>
 * <p><pre><b>
 * 历史更新记录:</b>
 * 2004-6-17  创建此类型
 * 2005-9-30  修改方法:parseToDate(),去掉了对年份从(1970-9999)这个范围的限制。抛出异常:IllegalArgumentException(),JThinkRuntimeException()
 * 2005-10-2  修改方法: 其它方法,抛出异常:IllegalArgumentException(),JThinkRuntimeException()
 * 2005-10-2  增加方法: addTime(Date d, double times, int type)
 * 2005-10-2  增加方法: addSystemTime()
 * 2005-10-2  修改方法, 对于所有以日期对象类型java.util.Date为参数的方法,如果日期为null,都抛出异常:IllegalArgumentException()
 * <p>
 * </pre></p>
 */
public final class DateTimeHelper {
    /**
     * 把时间格式化成如:2002-08-03 8:26:30.400 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssSa_12 = "yyyy-MM-dd KK:mm:ss.S a";
    /**
     * 把时间格式化成如:2002-08-03 8:26:16 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssa_12 = "yyyy-MM-dd KK:mm:ss a";
    /**
     * 把时间格式化成如:2002-08-03 8:26 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmma_12 = "yyyy-MM-dd KK:mm a";
    /**
     * 把时间格式化成如:2002-08-03 8 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHa_12 = "yyyy-MM-dd KK a";
    /**
     * 把时间格式化成如:2002-07-05 am 格式的字符串
     */
    public final static String FMT_yyyyMMdda_12 = "yyyy-MM-dd a";
    /**
     * 把时间格式化成如:2002-08-03 08:26:30.400 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssS = "yyyy-MM-dd HH:mm:ss.S";
    /**
     * 把时间格式化成如:2002-08-03 08:26:16 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";
    /**
     * 把时间格式化成如:2002-08-03 08:26 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmm = "yyyy-MM-dd HH:mm";
    /**
     * 把时间格式化成如:2002-08-03 08 格式的字符串
     */
    public final static String FMT_yyyyMMddHH = "yyyy-MM-dd HH";
    /**
     * 把时间格式化成如:2002-07-05 格式的字符串
     */
    public final static String FMT_yyyyMMdd = "yyyy-MM-dd";
    /**
     * 把时间格式化成如:2002-07 格式的字符串
     */
    public final static String FMT_yyyyMM = "yyyy-MM";
    /**
     * 把时间格式化成如:07.19 格式的字符串
     */
    public final static String FMT_MMdd = "MM.dd";
    /**
     * 把时间格式化成如:12:08 PM(下午) 格式的字符串
     */
    public final static String FMT_HHmmA_12 = "KK:mm a";
    /**
     * 把时间格式化成如:0:55 AM上午, CST 格式的字符串
     */
    public final static String FMT_HHmmAz_12 = "KK:mm a,z";
    /**
     * 把时间格式化成如:0:56 AM上午, 中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmAzzzz_12 = "KK:mm a,zzzz";
    /**
     * 把时间格式化成如:12:08:23 am 格式的字符串
     */
    public final static String FMT_HHmmssA_12 = "KK:mm:ss a";
    /**
     * 把时间格式化成如:0:55:33 AM上午, CST 格式的字符串
     */
    public final static String FMT_HHmmssAz_12 = "KK:mm:ss a,z";
    /**
     * 把时间格式化成如:0:56:23 AM上午, 中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmssAzzzz_12 = "KK:mm:ss a,zzzz";
    /**
     * 把时间格式化成如:22:04:45 格式的字符串
     */
    public final static String FMT_HHmmss = "HH:mm:ss";
    /**
     * 把时间格式化成如:22:04:45.824 格式的字符串
     */
    public final static String FMT_HHmmssS = "HH:mm:ss.S";
    /**
     * 把时间格式化成如:22:04 格式的字符串
     */
    public final static String FMT_HHmm = "HH:mm";
    /**
     * 把时间格式化成如:22:04,CST 格式的字符串
     */
    public final static String FMT_HHmmz = "HH:mm,z";
    /**
     * 把时间格式化成如:22:04,中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmzzzz = "HH:mm,zzzz";
    /**
     * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串
     */
    public final static String FMT_WWMMDDYY_EN = "EEE,MMM d,''yyyy";
    /**
     * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串
     */
    public final static String FMT_WWMMDDYY_CN = "EEE,yyyy年MMMd号";
    /**
     * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串
     */
    public final static String FMT_MMDDYY_EN = "MMM d,''yyyy";
    /**
     * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串
     */
    public final static String FMT_MMDDYY_CN = "yyyy年MMMd号";
    /**
     * 把时间格式化成如:星期几 格式的字符串,即可获得该日这个时间是星期几
     */
    public final static String FMT_WW = "EEE";
    public final static String FMT_ddMMyyyy = "dd-MM-yyyy";
    /**
     * 把时间格式成日期数字,如:20120606
     */
    public final static String FMT_yyyyMMdd_noseparator = "yyyyMMdd";
    public final static String FMT_yyyyMMdd_Zh = "yyyy年MM月dd日";
    public final static String FMT_yyyyMMddHH_noseparator = "yyyyMMddHH";
    /**
     * 把时间格式成日期数字,如:20120606121212
     */
    public final static String FMT_yyyyMMddhhmmss_noseparator = "yyyyMMddHHmmss";
    /**
     * 把时间格式化成如:2002.07.05 格式的字符串
     */
    public final static String FMT_yyyyxMMxdd = "yyyy.MM.dd";
    /**
     * 常用的格式化时间的格式组,用于本类中格式化字符串成时间型
     */
    private final static String[] formatStr = {
            FMT_ddMMyyyy,
            FMT_yyyyMMddHHmmssS,
            FMT_yyyyMMddHHmmss,
            FMT_yyyyMMddHHmm,
            FMT_yyyyMMddHH,
            FMT_yyyyMMdd,
            FMT_HHmmss,
            FMT_HHmmssS,
            FMT_HHmm,
            FMT_HHmmz,
            FMT_HHmmzzzz,
            FMT_yyyyMMddHHmmssSa_12,
            FMT_yyyyMMddHHmmssa_12,
            FMT_yyyyMMddHHmma_12,
            FMT_yyyyMMddHHa_12,
            FMT_yyyyMMdda_12,
            FMT_HHmmA_12,
            FMT_HHmmAz_12,
            FMT_HHmmAzzzz_12,
            FMT_HHmmssA_12,
            FMT_HHmmssAz_12,
            FMT_HHmmssAzzzz_12
    };
    /**
     * 私有化构造器,使得不能产生该类对象,类中所有的方法均为静态方法
     */
    private DateTimeHelper() {
    }
    /**
     * 根据给出的Date值和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param date
     * @param formatStr
     * @return 如果为null,返回字符串""
     */
    public static String formatDateTimetoString(Date date, String formatStr) {
        String reStr = "";
        if (date == null || formatStr == null || formatStr.trim().length() < 1) {
            return reStr;
        }
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern(formatStr);
        reStr = sdf.format(date);
        return reStr;
    }
    public static Date getSystemDate(String fmtstr) {
        try {
            return parseToDate(formatDateTimetoString(getSystemDate(), fmtstr));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return getSystemDate();
        }
    }
    /**
     * 根据给出的Date值和格式串采用给定的国家所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param date      日期对象
     * @param formatStr 日期格式
     * @return 如果为null,返回字符串""
     */
    public static String formatDateTimetoString(Date date, String formatStr, Locale locale) {
        String reStr = "";
        if (date == null || formatStr == null || locale == null || formatStr.trim().length() < 1) {
            return reStr;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale);
        reStr = sdf.format(date);
        return reStr;
    }
    /**
     * 根据给出的Date值字符串和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param dateStr   日期串
     * @param formatStr 日期格式
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateStr, String formatStr) throws Exception {
        String dStr = "";
        if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0) {
            dStr = formatDateTimetoString(parseToDate(dateStr), formatStr);
        }
        return dStr;
    }
    /**
     * 根据给出的Date值字符串和格式串采用指定国家的风格来格式化时间,并返回相应的字符串
     *
     * @param dateStr   日期串
     * @param formatStr 日期格式
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateStr, String formatStr, Locale locale) throws Exception {
        String dStr = "";
        if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0 && locale != null) {
            dStr = formatDateTimetoString(parseToDate(dateStr, locale), formatStr, locale);
        }
        return dStr;
    }
    /**
     * 按指定的格式和操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @param formatStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, String formatStr) throws Exception {
        if (dateTimeStr == null || formatStr == null || dateTimeStr.trim().length() < 1 || formatStr.trim().length() < 1) {
            throw new IllegalArgumentException("参数dateTimeStr、formatStr不能是null或空格串!");
        }
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
        try {
            return sdf.parse(dateTimeStr);
        } catch (ParseException e) {
            throw new Exception(e);
        }
    }
    /**
     * 按指定的格式和指定国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @param formatStr
     * @param locale
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, String formatStr, Locale locale) throws Exception {
        if (dateTimeStr != null && formatStr != null && locale != null && dateTimeStr.trim().length() > 0 && formatStr.trim().length() > 0) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
                throw new Exception(e);
            }
        } else {
            throw new IllegalArgumentException("参数dateTimeStr、formatStr、locale不能是null或空格串!");
        }
    }
    /**
     * 按操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr) throws Exception {
        if (dateTimeStr == null || dateTimeStr.trim().length() < 1) {
            throw new IllegalArgumentException("参数dateTimeSt不能是null或空格串!");
        }
        int formatStrLength = formatStr.length;
        int i = 0;
        for (i = 0; i < formatStrLength; i++) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i]);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
            }
        }
        throw new Exception("日期格式不正确!");
    }
    /**
     * 根据给出的年月和日返回一个日期型的对象
     *
     * @param year  年
     * @param month 月 ,1到12
     * @param day   日 ,1到31
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(int year, int month, int day) throws Exception {
        if (month < 1 || month > 12 || day < 1 || day > 31) {
            throw new IllegalArgumentException("参数不正确!");
        }
        String yearStr = String.valueOf(year);
        String monthStr = String.valueOf(month);
        String dayStr = String.valueOf(day);
        return parseToDate(yearStr + "-" + monthStr + "-" + dayStr);
    }
    /**
     * 根据给出的年月日、时分秒、返回一个对应的Date型对象
     *
     * @param year  年
     * @param month 月 ,1到12
     * @param day   日 ,1到31
     * @param h     小时,从0到23
     * @param m     分,从0到60
     * @param s     秒,从0到60
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(int year, int month, int day, int h, int m, int s) throws Exception {
        if (month < 1 || month > 12 || day < 1 || day > 31 || h < 0 || h > 23 || m < 0 || m > 60 || s < 0 || s > 60) {
            throw new IllegalArgumentException("参数不正确!");
        }
        String yearStr = String.valueOf(year);
        String monthStr = String.valueOf(month);
        String dayStr = String.valueOf(day);
        String hStr = String.valueOf(h);
        String mStr = String.valueOf(m);
        String sStr = String.valueOf(s);
        return parseToDate(yearStr + "-" + monthStr + "-" + dayStr + " " + hStr + ":" + mStr + ":" + sStr);
    }
    /**
     * 按指定国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, Locale locale) throws Exception {
        if (dateTimeStr == null || dateTimeStr.trim().length() < 1 || locale == null) {
            throw new IllegalArgumentException("参数dateTimeSt、locale不能是null或空格串!");
        }
        int formatStrLength = formatStr.length;
        int i = 0;
        for (i = 0; i < formatStrLength; i++) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i], locale);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
            }
        }
        throw new Exception("日期格式不正确!");
    }
    /**
     * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateTimeStr) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss);
    }
    /**
     * 将给定的日期时间字符串按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateTimeStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss, locale);
    }
    /**
     * 将给定的日期时间按操作系统默认的国家内格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTime
     * @return 如果为null,返回""
     */
    public static String formatDateTimetoString(Date dateTime) {
        return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss);
    }
    /**
     * 将给定的日期时间按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTime
     * @param locale
     * @return 如果为null,返回""
     */
    public static String formatDateTimetoString(Date dateTime, Locale locale) {
        return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss, locale);
    }
    /**
     * 将给定的日期字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param date
     * @param dateStr 日期串
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDatetoString(Date date, String dateStr) throws Exception {
        return formatDateTimetoString(dateStr, FMT_yyyyMMdd);
    }
    /**
     * 将给定的日期字符串按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param dateStr 日期串
     * @param locale  Locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDatetoString(String dateStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateStr, FMT_yyyyMMdd, locale);
    }
    /**
     * 将给定的日期按指定操作系统默认国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param d 日期对象
     * @return 如果为null,返回""
     */
    public static String formatDatetoString(Date d) {
        return formatDateTimetoString(d, FMT_yyyyMMdd);
    }
    /**
     * 将给定的日期按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param d      日期对象
     * @param locale Locale
     * @return 如果为null,返回""
     */
    public static String formatDatetoString(Date d, Locale locale) {
        return formatDateTimetoString(d, FMT_yyyyMMdd, locale);
    }
    /**
     * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatTimetoString(String dateTimeStr) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss);
    }
    /**
     * 将给定的日期时间字符串按指定国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatTimetoString(String dateTimeStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale);
    }
    /**
     * 将给定的日期时间按指定操作系统默认国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     */
    public static String formatTimetoString(Date dateTimeStr) {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss);
    }
    /**
     * 将给定的日期时间按指定国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     */
    public static String formatTimetoString(Date dateTimeStr, Locale locale) {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale);
    }
    /**
     * 返回一个时间的年份整数
     *
     * @param d
     * @return 年份
     */
    public static int getYearOfDate(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.YEAR);
    }
    /**
     * 返回一个时间的月份整数
     *
     * @param d
     * @return 月份
     */
    public static int getMonthOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.MONTH) + 1;
    }
    /**
     * 返回一个时间的天份整数,是这个月的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfMonth(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }
    /**
     * 返回一个时间的天份整数,是这个年份的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_YEAR);
    }
    /**
     * 返回一个时间的天份整数,是这个周的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfWeek(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_WEEK) - 1;
    }
    /**
     * 返回一个时间的周的整数,是这个月的第几周
     *
     * @param d
     * @return 周
     */
    public static int getWeekOfMonth(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.WEEK_OF_MONTH);
    }
    /**
     * 返回一个时间的周的整数,是这个年份的第几周
     *
     * @param d
     * @return 周
     */
    public static int getWeekOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.WEEK_OF_YEAR);
    }
    /**
     * 返回该时间所对应的在一天中的小时数的整数,如当前(Date now)是下午3点,返回为15
     *
     * @param d
     * @return 小时
     */
    public static int getHoursOfDay(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int hours = calendar.get(Calendar.HOUR_OF_DAY);
        return hours;
    }
    /**
     * 返回该时间所对应的在一天中的小时数的整数(采用12小时制),如当前(Date now)是下午3点,返回为3
     *
     * @param d
     * @return 小时
     */
    public static int getHoursOfDay12(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int hours = calendar.get(Calendar.HOUR);
        return hours;
    }
    /**
     * 返回该时间所对应的分钟数中的整数,如now是15点14分,则返回14
     *
     * @param d
     * @return 分钟
     */
    public static int getMinutesOfHour(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int minutes = calendar.get(Calendar.MINUTE);
        return minutes;
    }
    /**
     * 返回该时间所对应的秒数中的整数,如now是15点14分34秒,则返回34
     *
     * @param d
     * @return 秒
     */
    public static int getSecondsOfMinute(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int seconds = calendar.get(Calendar.SECOND);
        return seconds;
    }
    /**
     * 返回该时间所对应的毫秒数中的整数,如now是15点14分34秒470毫秒,则返回470
     *
     * @param d
     * @return 毫秒
     */
    public static int getMillisecondsOfSecond(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int millisecond = calendar.get(Calendar.MILLISECOND);
        return millisecond;
    }
    /**
     * 返回该时间相对于1970年1月1日开始计算的对应的毫秒数
     *
     * @param d
     * @return 毫秒数
     */
    public static long getTime(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        return d.getTime();
    }
    /**
     * 比较两个时间的先后顺序。
     * 如果时间d1在d2之前,返回1,
     * 如果时间d1在d2之后,返回-1,
     * 如果二者相等,返回0
     *
     * @param d1
     * @param d2
     * @return 如果时间d1在d2之前,返回1,
     * 如果时间d1在d2之后,返回-1,
     * 如果二者相等,返回0
     */
    public static int compareTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long dI1 = d1.getTime();
        long dI2 = d2.getTime();
        if (dI1 > dI2) {
            return -1;
        } else if (dI1 < dI2) {
            return 1;
        } else {
            return 0;
        }
    }
    /**
     * 返回两个日期之间的毫秒数的差距
     *
     * @param d1
     * @param d2
     * @return 二者至1970年1.1后的毫秒数的差值
     */
    public static long getMillisecondsOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long dI1 = d1.getTime();
        long dI2 = d2.getTime();
        return (dI1 - dI2);
    }
    /**
     * 获得两个日期之间相差的秒数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的秒数
     */
    public static double getSecondsOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long i = getMillisecondsOfTwoDate(d1, d2);
        return (double) i / 1000;
    }
    /**
     * 获得两个日期之间相差的分钟数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的分钟数
     */
    public static double getMinutesOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的小时数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的小时数
     */
    public static double getHoursOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 60 / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的天数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的天数
     */
    public static double getDaysOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 24 / 60 / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的天数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的天数
     */
    public static Long daysOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return millions / 24 / 60 / 60 / 1000;
    }
    /**
     * 把给定的时间加上指定的时间值,可以为负。
     *
     * @param d     日期对象
     * @param times 时间值
     * @param type  类型,
     *              Calendar.MILLISECOND,毫秒<BR>
     *              Calendar.SECOND,秒<BR>
     *              Calendar.MINUTE,分钟<BR>
     *              Calendar.HOUR,小时<BR>
     *              Calendar.DATE,日<BR>
     * @return 如果d为null,返回null
     */
    public static Date addTime(Date d, double times, int type) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        long qv = 1;
        switch (type) {
            case Calendar.MILLISECOND:
                qv = 1;
                break;
            case Calendar.SECOND:
                qv = 1000;
                break;
            case Calendar.MINUTE:
                qv = 1000 * 60;
                break;
            case Calendar.HOUR:
                qv = 1000 * 60 * 60;
                break;
            case Calendar.DATE:
                qv = 1000 * 60 * 60 * 24;
                break;
            default:
                throw new RuntimeException("时间类型不正确!type=" + type);
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        long milliseconds = (long) Math.round(Math.abs(times) * qv);
        if (times > 0) {
            for (; milliseconds > 0; milliseconds -= 2147483647) {
                if (milliseconds > 2147483647) {
                    calendar.add(Calendar.MILLISECOND, 2147483647);
                } else {
                    calendar.add(Calendar.MILLISECOND, (int) milliseconds);
                }
            }
        } else {
            for (; milliseconds > 0; milliseconds -= 2147483647) {
                if (milliseconds > 2147483647) {
                    calendar.add(Calendar.MILLISECOND, -2147483647);
                } else {
                    calendar.add(Calendar.MILLISECOND, -(int) milliseconds);
                }
            }
        }
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的年份,可以为负, 返回新的被加上了年份的日期对象,不影响参数日期对象值
     * Given a certain time and a specified year, which can be negative, returns a new date object with the added year, without affecting the value of the original date object.
     * @param d
     * @param years
     * @return 日期对象
     */
    public static Date addYears(Date d, int years) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.YEAR, years);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的月份,可以为负
     * Adding the specified number of month to the given time is possible, including negative values.
     * @param d
     * @param months
     * @return 日期对象
     */
    public static Date addMonths(Date d, int months) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MONTH, months);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的天数,可以为负
     * Adding the specified number of day to the given time is possible, including negative values.
     * @param d    日期对象
     * @param days
     * @return 日期对象
     */
    public static Date addDays(Date d, int days) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.HOUR, days * 24);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的小时,可以为负
     * Adding the specified number of hour to the given time is possible, including negative values.
     * @param d     日期对象
     * @param hours
     * @return 日期对象
     */
    public static Date addHours(Date d, int hours) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.HOUR, hours);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的分钟,可以为负
     * Adding the specified number of minute to the given time is possible, including negative values.
     * @param d
     * @param minutes
     * @return 日期对象
     */
    public static Date addMinutes(Date d, int minutes) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MINUTE, minutes);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的秒数,可以为负
     * Adding the specified number of seconds to the given time is possible, including negative values.
     * @param d
     * @param seconds
     * @return 日期对象
     */
    public static Date addSeconds(Date d, int seconds) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.SECOND, seconds);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的毫秒数,可以为负
     * Adding the specified number of milliseconds to the given time can result in a negative value.
     * @param d
     * @param milliseconds
     * @return 日期对象
     */
    public static Date addMilliseconds(Date d, int milliseconds) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MILLISECOND, milliseconds);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的年份是新的给定的年份
     * Setting the year of a date object to a new given year.
     * @param d    需要设定的日期对象
     * @param year 新的年份
     * @return 日期对象
     */
    public static Date setYearOfDate(Date d, int year) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.YEAR, year);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的月份是新的给定的月份
     * Set the month of a date object to a new given month.
     * @param d     需要设定的日期对象
     * @param month 新的月份
     * @return 新日期对象
     */
    public static Date setMonthOfDate(Date d, int month) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MONTH, month);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的天是新的给定的天
     * Set the day of a date object to a new given day.
     * @param d   需要设定的日期对象
     * @param day 新的天
     * @return 新日期对象
     */
    public static Date setDayOfDate(Date d, int day) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.DAY_OF_MONTH, day);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的小时是新的给定的小时
     * Setting the hour of a date object to a new given hour.
     * @param d    需要设定的日期对象
     * @param hour 新的小时数
     * @return 新日期对象
     */
    public static Date setHourOfDate(Date d, int hour) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的分钟是新的给定的分钟数
     * Set the minutes of a date object to a new given minute value.
     * @param d      需要设定的日期对象
     * @param minute 新的分钟数
     * @return 新日期对象
     */
    public static Date setMinuteOfDate(Date d, int minute) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MINUTE, minute);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的秒数是新的给定的分钟数
     * Setting the seconds of a date object to the new given minute value.
     *
     * @param d      需要设定的日期对象
     * @param second 新的秒数
     * @return 新日期对象
     */
    public static Date setSecondOfDate(Date d, int second) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.SECOND, second);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的毫秒数是新的给定的分钟数
     * Setting the milliseconds of a date object to a new given minute value.
     * @param d           需要设定的日期对象
     * @param millisecond 新的毫秒数
     * @return 新日期对象
     */
    public static Date setMillisecondOfDate(Date d, int millisecond) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MILLISECOND, millisecond);
        return calendar.getTime();
    }
    /**
     * 返回指定日期的月份的天数量
     * Retrieve the number of days in the month of the specified date.
     * @param d 日期对象
     */
    public static int getDaysOfMonth(Date d) {
        int year = getYearOfDate(d);
        int month = getMonthOfYear(d);
        return getDaysOfMonth(year, month);
    }
    /**
     * 返回指定日期的月份的天数量
     * Retrieve the number of days in the month of the specified date.
     * @param year  年
     * @param month 月
     */
    public static int getDaysOfMonth(int year, int month) {
        int days = 0;
        if (month == 2) {
            if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
                days = 29;
            } else {
                days = 28;
            }
        }
        if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
            days = 30;
        }
        if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) {
            days = 31;
        }
        return days;
    }
    /**
     * 返回系统时间,以日期对象形式返回
     *
     * @return 日期对象
     */
    public static Date getSystemDate() {
        return new Date(System.currentTimeMillis());
    }
    /**
     * 返回系统时间,以毫秒形式返回
     *
     * @return 毫秒数
     */
    public static long getSystemTime() {
        return System.currentTimeMillis();
    }
    /**
     * 返回24小时前的时间
     *
     * @param date
     * @return
     */
    public static Date getLastDay(Date date) {
        long day = date.getTime();
        long lastDay = day - 24 * 60 * 60 * 1000;
        return new Date(lastDay);
    }
    /**
     * 返回24小时后的时间
     *
     * @param date
     * @return
     */
    public static Date getTomorrow(Date date) {
        long day = date.getTime();
        long tomorrow = day + 24 * 60 * 60 * 1000;
        return new Date(tomorrow);
    }
    /**
     * 取得30天前的这个时间
     *
     * @return
     */
    public static Date getDayLastMonth() {
        long day = new Date().getTime();
        long dayLastMonth = day - 24 * 60 * 60 * 1000 * 20;
        return new Date(dayLastMonth);
    }
    /**
     * 取得30天后的这个时间
     *
     * @return
     */
    public static Date getDayNextMonth() {
        long day = new Date().getTime();
        long dayNextMonth = day + 20 * 24 * 60 * 60 * 1000;
        return new Date(dayNextMonth);
    }
    public static int getMonthCount(Date sDate, Date eDate) {
        String sDateStr = DateTimeHelper.formatDateTimetoString(sDate, "MM");
        String eDateStr = DateTimeHelper.formatDateTimetoString(eDate, "MM");
        int monthCount = Integer.parseInt(eDateStr) - Integer.parseInt(sDateStr) + 1;
        return monthCount;
    }
    /**
     * 取得下个月的这天,比如2月1日可取得3月1日,此方法有很大局限性,不能用于月末的天数
     * Obtain the same day of the following month, for example, February 1st can obtain March 1st. This method has significant limitations and cannot be used for the last days of the month.
     * @param date
     * @return
     */
    public static Date getDayNextMonth(Date date) {
        String yearStr = DateTimeHelper.formatDateTimetoString(date, "yyyy");
        String monthStr = DateTimeHelper.formatDateTimetoString(date, "MM");
        String dayStr = DateTimeHelper.formatDateTimetoString(date, "dd");
        int year = Integer.parseInt(yearStr);
        int month = Integer.parseInt(monthStr);
        if (month == 12) {
            month = 1;
            year = year + 1;
            yearStr = String.valueOf(year);
            monthStr = String.valueOf(month);
        }
        String dateStr = yearStr + "-" + monthStr + "-" + dayStr;
        try {
            date = DateTimeHelper.parseToDate(dateStr);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 获取当月开始时0点0分0秒
     *
     * @return
     */
    public static Date getCurrentMouthStart() {
        Date d = getSystemDate();
        d = setDayOfDate(d, 1);
        d = setHourOfDate(d, 0);
        d = setMinuteOfDate(d, 0);
        d = setSecondOfDate(d, 0);
        return d;
    }
    /**
     * 返回下月的这天
     *
     * @param date
     * @return
     */
    public static Date getDateNextMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, +1);
        return cal.getTime();
    }
    /**
     * 根据时间获取和当前时间的差距.
     * Obtain the difference between the current time and the time in question.
     * @param date - 待比较实际
     * @return 时间差距字符串
     */
    public static String getPassdTime(Date date) {
        if (null == date) {
            return null;
        }
        String ret = null;
        // 计算和当前相差秒数
        // Calculate the difference in seconds from the current time.
        long currentTimeMillis = System.currentTimeMillis();
        long timeDiff = (currentTimeMillis - date.getTime());
        int seconds = (int) (timeDiff / 1000);
        int minutes = seconds / 60;
        int hours = minutes / 60;
        int days = hours / 24;
        int months = days / 30;
        if (days <= 7) {
            if (days != 0) {
                ret = days + "天前";
            } else if (hours != 0) {
                ret = hours + "小时前";
            } else if (minutes != 0) {
                ret = minutes + "分钟前";
            } else {
                ret = "刚刚";
            }
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss");
            ret = sdf.format(date);
        }
        return ret;
    }
    /**
     * 获取当前日期后几天的日期
     * Obtaining the date of the day after several days from the current date.
     * @param day 天数
     * @return
     */
    public static Date getCurrentNextDays(int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, day);
        Date date = calendar.getTime();
        return date;
    }
    public static String getCurrentStringDate() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = simpleDateFormat.format(new Date());
        return dateString;
    }
    /**
     * 获取当前日期是星期几<br>
     * Obtain the day of the week for the current date.
     * @param dt
     * @return 当前日期是星期几
     */
    public static String getWeekOfDate(Date dt) {
        String[] weekDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0) {
            w = 0;
        }
        return weekDays[w];
    }
    /**
     * 获取今天时间 2017-11-20 00:00:00
     */
    public static Date todayDate() {
        try {
            String date = formatDatetoString(new Date());
            String todayString = date + " 00:00:00";
            return parseToDate(todayString, FMT_yyyyMMdd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Date();
    }
    /**
     * 获取指定日期的 时间 2017-11-20 00:00:00
     *
     * @param date
     * @return
     */
    public static Date createDate(Date date) {
        try {
            String dates = formatDatetoString(date);
            String todayString = dates + " 00:00:00";
            return parseToDate(todayString, FMT_yyyyMMdd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Date();
    }
    public static String createDateTime(Date date) {
        try {
            String dates = formatDatetoString(date);
            String time = DateTimeHelper.formatDateTimetoString(new Date(), FMT_HHmmss);
            String todayString = dates + " " + time;
            return todayString;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    /**
     * @param time
     * @return
     */
    public static String getTimeHint(Date time) {
        String hint = "";
        double minutes = DateTimeHelper.getMinutesOfTwoDate(new Date(), time);
        double hours = DateTimeHelper.getHoursOfTwoDate(new Date(), time);
        double days = DateTimeHelper.getDaysOfTwoDate(new Date(), time);
        if (minutes < 1) {
            hint = "刚刚";
        } else if (hours < 1) {
            hint = new Double(minutes).intValue() + "分钟前";
        } else if (days < 1) {
            hint = new Double(hours).intValue() + "小时前";
        } else if (days < 7) {
            hint = new Double(days).intValue() + "天前";
        } else {
            hint = DateTimeHelper.formatDateTimetoString(time, DateTimeHelper.FMT_yyyyMMdd);
        }
        return hint;
    }
    /**
     * 根据时间获取和当前时间的差距.
     * Obtain the difference between the current time and the time in question.
     * @param date - 待比较实际
     * @return 时间差距字符串
     */
    public static String getLoginTime(Date date) {
        if (null == date) {
            return null;
        }
        String ret = null;
        // 计算和当前相差秒数
        //Calculate the difference in seconds from the current time.
        long currentTimeMillis = System.currentTimeMillis();
        long timeDiff = (currentTimeMillis - date.getTime());
        int seconds = (int) (timeDiff / 1000);
        int minutes = seconds / 60;
        int hours = minutes / 60;
        int days = hours / 24;
        int months = days / 30;
        if (months != 0) {
            ret = "1个月前";
        } else if (days != 0) {
            ret = days + "天前";
        } else if (hours != 0) {
            ret = hours + "小时前";
        } else if (minutes != 0) {
            ret = minutes + "分钟前";
        } else {
            ret = "刚刚";
        }
        return ret;
    }
    public static Date getWXTime() {
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        Date date = calendar.getTime();
        return date;
    }
    /**
     * 是否是同一天
     * it the same day
     * @param first
     * @param second
     * @return
     */
    public static Boolean isSameDay(Date first, Date second) {
        if (first == null || second == null) {
            return false;
        }
        int day1 = getDayOfYear(first);
        int day2 = getDayOfYear(second);
        if (day1 != day2) {
            return false;
        }
        return true;
    }
    /**
     * 是否超过指定时刻
     * Has the specified time limit been exceeded
     * @param day  时间
     * @param time 指定时刻
     * @return
     */
    public static Boolean expireDayTime(Date day, Integer time) {
        if (null == day) {
            return false;
        }
        try {
            String dates = formatDatetoString(day);
            String timeHour = "";
            for (int i = 0; i <= 23; i++) {
                if (i == time) {
                    if (i < 10) {
                        timeHour += " 0" + time + ":00:00";
                    } else if (i < 23) {
                        timeHour += " " + time + ":00:00";
                    } else {
                        timeHour += " 00" + time + ":00:00";
                    }
                }
            }
            String todayString = dates + timeHour;
            Date esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss);
            if (DateTimeHelper.compareTwoDate(day, esDayTime) != 1) {
                int i = compareTwoDate(day, esDayTime);
                System.out.println(i);
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return false;
    }
    /**
     * 指定一天哪一个小时
     * Specify which hour of a particular day.
     * @param time
     * @return
     */
    public static Date createDayTime(Integer time) {
        String dates = formatDatetoString(new Date());
        String timeHour = "";
        for (int i = 0; i <= 23; i++) {
            if (i == time) {
                if (i < 10) {
                    timeHour += " 0" + time + ":00:00";
                } else if (i < 23) {
                    timeHour += " " + time + ":00:00";
                } else {
                    timeHour += " 00" + time + ":00:00";
                }
            }
        }
        String todayString = dates + timeHour;
        Date esDayTime = new Date();
        try {
            esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return esDayTime;
    }
    /**
     * 数字换算成中文(周)
     * Conversion of numbers to Chinese (weeks)
     * @param time
     * @return
     */
    public static String getWeekString(Integer time) {
        if (time == 1) {
            return "一";
        } else if (time == 2) {
            return "二";
        } else if (time == 3) {
            return "三";
        } else if (time == 4) {
            return "四";
        } else if (time == 5) {
            return "五";
        } else if (time == 6) {
            return "六";
        } else if (time == 0 || time == 7) {
            return "日";
        }
        return null;
    }
    /**
     * LocalDateTime -> Date
     *
     * @param localDateTime
     * @return
     */
    public static Date asDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }
    /**
     * Date -> LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDateTime asLocalDateTime(Date date) {
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
    }
    /**
     * 获取两个时间的间隔(秒)
     * Obtain the time difference between two instances (in seconds).
     * @param d1
     * @param d2
     * @return
     */
    public static long getDateBetween(Date d1, Date d2) {
        return Math.abs((d1.getTime() - d2.getTime()) / 1000);//取绝对值
    }
    /**
     * @param date
     * @return 获取今天最后的时间
     * Obtain the final time of today.
     */
    public static Date getEndDate(Date date) {
        if (date == null) {
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        return c.getTime();
    }
    /**
     * 日期天数差
     * Days Difference
     */
    public static int daysBetween(Date today, Date endDate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        today = sdf.parse(sdf.format(today));
        endDate = sdf.parse(sdf.format(endDate));
        Calendar cal = Calendar.getInstance();
        cal.setTime(today);
        long time1 = cal.getTimeInMillis();
        cal.setTime(endDate);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);
        return Integer.parseInt(String.valueOf(between_days));
    }
    /**
     * 获取到当月所有日期
     * Obtain all dates of the current month
     * @param date
     * @return
     */
    public static List<Date> getAllTheDateOftheMonth(Date date) {
        List<Date> list = new ArrayList<Date>();
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DATE, 1);
        int month = cal.get(Calendar.MONTH);
        while (cal.get(Calendar.MONTH) == month) {
            list.add(cal.getTime());
            cal.add(Calendar.DATE, 1);
        }
        return list;
    }
    /*public static void main(String[] args) throws ParseException {
        List<Date> allTheDateOftheMonth = getAllTheDateOftheMonth(new Date());
        Date date = allTheDateOftheMonth.get(11);
        System.out.println(date.toLocaleString());
        int i = daysBetween(new Date(), date);
        System.out.println(i);
    }*/
}
cloud-server-competition/src/main/java/com/dsh/competition/util/DateUtil.java
New file
@@ -0,0 +1,332 @@
/**
 * Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.dsh.competition.util;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
import java.util.TimeZone;
public class DateUtil {
    private static TimeZone tz = TimeZone.getTimeZone("GMT+8");
    /**
     * 获取YYYY格式
     */
    public static String getYear() {
        return formatDate(new Date(), "yyyy");
    }
    /**
     * 获取YYYY格式
     */
    public static String getYear(Date date) {
        return formatDate(date, "yyyy");
    }
    /**
     * 获取YYYY-MM-DD格式
     */
    public static String getDay() {
        return formatDate(new Date(), "yyyy-MM-dd");
    }
    /**
     * 获取YYYY-MM-DD格式
     */
    public static String getDay(Date date) {
        return formatDate(date, "yyyy-MM-dd");
    }
    /**
     * 获取YYYYMMDD格式
     */
    public static String getDays() {
        return formatDate(new Date(), "yyyyMMdd");
    }
    /**
     * 获取YYYYMMDD格式
     */
    public static String getDays(Date date) {
        return formatDate(date, "yyyyMMdd");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss格式
     */
    public static String getTime() {
        return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss.SSS格式
     */
    public static String getMsTime() {
        return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
    }
    /**
     * 获取YYYYMMDDHHmmss格式
     */
    public static String getAllTime() {
        return formatDate(new Date(), "yyyyMMddHHmmss");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss格式
     */
    public static String getTime(Date date) {
        return formatDate(date, "yyyy-MM-dd HH:mm:ss");
    }
    public static String formatDate(Date date, String pattern) {
        String formatDate = null;
        if (StringUtils.isNotBlank(pattern)) {
            formatDate = DateFormatUtils.format(date, pattern);
        } else {
            formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
        }
        return formatDate;
    }
    /**
     * 日期比较,如果s>=e 返回true 否则返回false)
     *
     * @author luguosui
     */
    public static boolean compareDate(String s, String e) {
        if (parseDate(s) == null || parseDate(e) == null) {
            return false;
        }
        return parseDate(s).getTime() >= parseDate(e).getTime();
    }
    /**
     * 格式化日期
     */
    public static Date parseDate(String date) {
        return parse(date, "yyyy-MM-dd");
    }
    /**
     * 格式化日期
     */
    public static Date parseTimeMinutes(String date) {
        return parse(date, "yyyy-MM-dd HH:mm");
    }
    /**
     * 格式化日期
     */
    public static Date parseTime(String date) {
        return parse(date, "yyyy-MM-dd HH:mm:ss");
    }
    /**
     * 格式化日期
     */
    public static Date parse(String date, String pattern) {
        try {
            if(Objects.nonNull(date)) {
                return DateUtils.parseDate(date, pattern);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 格式化日期
     */
    public static String format(Date date, String pattern) {
        return DateFormatUtils.format(date, pattern);
    }
    /**
     * 把日期转换为Timestamp
     */
    public static Timestamp format(Date date) {
        return new Timestamp(date.getTime());
    }
    /**
     * 校验日期是否合法
     */
    public static boolean isValidDate(String s) {
        return parse(s, "yyyy-MM-dd HH:mm:ss") != null;
    }
    /**
     * 校验日期是否合法
     */
    public static boolean isValidDate(String s, String pattern) {
        return parse(s, pattern) != null;
    }
    public static int getDiffYear(String startTime, String endTime) {
        DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
        try {
            int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse(
                    startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365);
            return years;
        } catch (Exception e) {
            // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
            return 0;
        }
    }
    /**
     * <li>功能描述:时间相减得到天数
     */
    public static long getDaySub(String beginDateStr, String endDateStr) {
        long day = 0;
        SimpleDateFormat format = new SimpleDateFormat(
                "yyyy-MM-dd");
        Date beginDate = null;
        Date endDate = null;
        try {
            beginDate = format.parse(beginDateStr);
            endDate = format.parse(endDateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
        // System.out.println("相隔的天数="+day);
        return day;
    }
    /**
     * 得到n天之后的日期
     */
    public static String getAfterDayDate(String days) {
        int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sdfd.format(date);
        return dateStr;
    }
    /**
     * 得到n天之后是周几
     */
    public static String getAfterDayWeek(String days) {
        int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("E");
        String dateStr = sdf.format(date);
        return dateStr;
    }
    /**
     * 得到系统日期
     *
     * @return
     */
    public static Date getDate() {
        TimeZone.setDefault(tz);
        return new Date();
    }
    /**
     * 获取当前毫秒数
     *
     * @return long
     */
    public static long getCurMilli() {
        long millisecond = 0;
        Calendar cal = Calendar.getInstance();
        millisecond = cal.getTimeInMillis();
        return millisecond;
    }
    /**
     * 得到系统Calendar日期
     *
     * @return
     */
    public static Calendar getCalendar() {
        TimeZone.setDefault(tz);
        Calendar cal = Calendar.getInstance();
        return cal;
    }
    /**
     * 毫秒转日期时间
     *
     * @param millisecond
     * @return
     */
    public static String getDateTime(long millisecond) {
        if (millisecond == 0) {
            millisecond = getCurMilli();
        }
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar = getCalendar();
        calendar.setTimeInMillis(millisecond);
        return dateformat.format(calendar.getTime());
    }
    /**
     * 日期转毫秒(加分钟)
     *
     * @param date
     * @return
     */
    public static long getMillisecond_fz(String date, Integer day) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if ("".equals(date)) {
            newDate = sdf.format(DateUtil.getDate());
        } else {
            newDate = getDateTime(Long.parseLong(date));
        }
        Date dt = null;
        try {
            dt = sdf.parse(newDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.MINUTE, day);
        Date dt1 = rightNow.getTime();
        return dt1.getTime();
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/DoubleUtil.java
New file
@@ -0,0 +1,16 @@
package com.dsh.competition.util;
import java.math.BigDecimal;
/**
 * Double文档
 */
public class DoubleUtil {
    public static Double format(Double num) {
        BigDecimal b = new BigDecimal(num);
        num = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return num;
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/EmojiUtil.java
New file
@@ -0,0 +1,95 @@
package com.dsh.competition.util;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmojiUtil {
    /**
     * 编码
     *
     * @param str 待转换字符串
     * @return 转换后字符串
     * @throws UnsupportedEncodingException exception
     * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集)
     */
    public static String emojiEncode(String str)
            throws UnsupportedEncodingException {
        String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(
                        sb,
                        "[["
                                + URLEncoder.encode(matcher.group(1),
                                "UTF-8") + "]]");
            } catch (UnsupportedEncodingException e) {
//                LOG.error("emojiConvert error", e);
                throw e;
            }
        }
        matcher.appendTail(sb);
//        LOG.debug("emojiConvert " + str + " to " + sb.toString()
//                + ", len:" + sb.length());
        return sb.toString();
    }
    /**
     * 解码
     *
     * @param str 转换后的字符串
     * @return 转换前的字符串
     * @throws UnsupportedEncodingException exception
     * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串
     */
    public static String emojiDecode(String str)
            throws UnsupportedEncodingException {
        String patternString = "\\[\\[(.*?)\\]\\]";
        Pattern pattern = Pattern.compile(patternString);
        if (str == null) {
            return str;
        }
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(sb,
                        URLDecoder.decode(matcher.group(1), "UTF-8"));
            } catch (UnsupportedEncodingException e) {
//                LOG.error("emojiRecovery error", e);
                throw e;
            }
        }
        matcher.appendTail(sb);
//        LOG.debug("emojiRecovery " + str + " to " + sb.toString());
//        System.out.println("emojiRecovery " + str + " to " + sb.toString());
        return sb.toString();
    }
    /**
     * @param str 待过滤字符串
     * @return 过滤后字符串
     * exception
     * @Description 将字符串中的emoji表情过滤掉
     */
    public static String emojiSub(String str) {
        String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "");
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/HeaderAuthUtil.java
New file
@@ -0,0 +1,20 @@
package com.dsh.competition.util;
import javax.servlet.http.HttpServletRequest;
public class HeaderAuthUtil {
    /**
     * 用户UserId变量
     */
    protected final static String HEADER_USERID = "userId";
    /**
     * 获取Request请求头UserId
     * @return
     */
    public static String getLoginAuthUserId (HttpServletRequest request) {
        String userId = request.getHeader(HEADER_USERID);
        return userId;
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/JsonUtil.java
New file
@@ -0,0 +1,157 @@
package com.dsh.competition.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 *
 * 返回json数据封装工具类
 *
 * @ClassName: JsonUtil
 * @author: yuds
 * @date: 2019-09-20 09:19:27
 * @version: V1.0.0
 */
public class JsonUtil {
    /**
     * <li>将对象转化为json输出
     * <li>QuoteFieldNames ———-输出key时是否使用双引号,默认为true
     * <li>WriteMapNullValue ——–是否输出值为null的字段,默认为false
     * <li>WriteNullNumberAsZero —-数值字段如果为null,输出为0,而非null
     * <li>WriteNullListAsEmpty —–List字段如果为null,输出为[],而非null
     * <li>WriteNullStringAsEmpty —字符类型字段如果为null,输出为”“,而非null
     * <li>WriteNullBooleanAsFalse –Boolean字段如果为null,输出为false,而非null
     * <li>DisableCircularReferenceDetect 禁止循环引用检测
     */
    private static SerializerFeature[] serializerFeaturess = { SerializerFeature.WriteMapNullValue,
            SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullListAsEmpty,
            SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullBooleanAsFalse,
            SerializerFeature.DisableCircularReferenceDetect, };
    private JsonUtil() {
    }
    /**
     * fastJson Object转json
     *
     * @param obj
     * @return
     */
    public static String objToJson(Object obj) {
        return JSON.toJSONString(obj, serializerFeaturess);
    }
    /**
     * fastJson Object转json
     *
     * @param obj
     * @param dateFormat 时间格式化
     * @return
     */
    public static String objToJson(Object obj, String dateFormat) {
        return JSON.toJSONStringWithDateFormat(obj, dateFormat, serializerFeaturess);
    }
    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();
    /**
     * 将对象转换成json字符串。
     * <p>
     * Title: pojoToJson
     * </p>
     * <p>
     * Description:
     * </p>
     *
     * @param data
     * @return
     */
    public static String objectToJson(Object data) {
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            MAPPER.setDateFormat(fmt);
            String string = MAPPER.writeValueAsString(data);
            return string;
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 将json结果集转化为对象
     *
     * @param jsonData json数据
     * @param beanType    对象中的object类型
     * @return
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        try {
            T t = MAPPER.readValue(jsonData, beanType);
            return t;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 将json数据转换成pojo对象list
     * <p>
     * Title: jsonToList
     * </p>
     * <p>
     * Description:
     * </p>
     *
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
        try {
            List<T> list = MAPPER.readValue(jsonData, javaType);
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static JsonNode jsonToNode(String jsonData) {
        try {
            return MAPPER.readTree(jsonData);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
    public static Map<String, String> jsonToMap(String json) {
        JsonNode nodes = jsonToNode(json);
        Iterator<Map.Entry<String, JsonNode>> fields = nodes.fields();
        Map<String, String> map = new HashMap<>();
        while (fields.hasNext()) {
            Map.Entry<String, JsonNode> next = fields.next();
            String value = next.getValue().asText("");
            map.put(next.getKey(), value);
        }
        return map;
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/LocalDateTimeUtils.java
New file
@@ -0,0 +1,80 @@
package com.dsh.competition.util;
import java.text.ParseException;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * LocalDateTimeUtils
 * LocalDateTime 时间工具
 *
 * @author yudeshan
 * @version V1.0
 */
public class LocalDateTimeUtils {
    private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 };
    private final static String[] constellationArr = new String[] { "摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" };
    /**
     * 取两个时间相差毫秒数
     *
     * @param start 开始时间
     * @param end   结束时间
     * @return
     */
    public static long betweenMillis(LocalDateTime start, LocalDateTime end) {
        Duration duration = Duration.between(start, end);
        return duration.toMillis();
    }
    /**
     * 通过生日计算年龄
     * @param birthDay 生日
     * @return
     * @throws ParseException
     */
    public static int getAgeByBirth(LocalDate birthDay) throws ParseException {
        int age = 0;
       //出生日期晚于当前时间,无法计算
        LocalDate now=LocalDate.now();
        if (birthDay.isAfter(now)) {
            throw new IllegalArgumentException( "生日大于当前时间!");
        }
        //当前年份
        int yearNow = now.getYear();
        //当前月份
        int monthNow = now.getMonthValue();
        //当前日期
        int dayOfMonthNow = now.getDayOfMonth();
        int yearBirth =birthDay.getYear();
        int monthBirth = birthDay.getMonthValue();
        int dayOfMonthBirth = birthDay.getDayOfMonth();
        //计算整岁数
        age = yearNow - yearBirth;
        if (monthNow <= monthBirth) {
            if (monthNow == monthBirth) {
                if (dayOfMonthNow < dayOfMonthBirth){
                    //当前日期在生日之前,年龄减一
                    age--;
                }
            } else {
                //当前月份在生日之前,年龄减一
                age--;
            }
        }
        return age;
    }
    /**
     * 根据月份计算星座
     */
    public static String getConstellation(LocalDate date) {
        Integer month=date.getMonthValue();
        Integer day=date.getDayOfMonth();
        return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month];
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/MessageUtils.java
New file
@@ -0,0 +1,26 @@
package com.dsh.competition.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
@Component
public class MessageUtils {
    @Autowired
    private MessageSource messageSource;
    /**
     * 根据消息键和参数 获取消息 委托给spring messageSource
     *
     * @param code 消息键
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public String get(String code, Object... args) {
        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/RedisUtil.java
New file
@@ -0,0 +1,127 @@
package com.dsh.competition.util;
import com.alibaba.csp.sentinel.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 * Redis工具类
 */
@Component
public class RedisUtil {
    @Autowired
    private JedisPool jedisPool;
    /**
     * 向redis中存储字符串没有过期时间
     * Storing strings in Redis without an expiration time.
     * @param key
     * @param value
     */
    public void setStrValue(String key, String value){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String set = resource.set(key, value);
            closeJedis(resource);
        }
    }
    /**
     * 以分钟为单位设置存储值(设置过期时间)
     * Set storage value in minutes (set expiration time) as units.
     * @param key
     * @param value
     * @param time 秒
     */
    public void setStrValue(String key, String value, int time){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String setex = resource.setex(key, time, value);
            closeJedis(resource);
        }
    }
    /**
     * 从redis中获取值
     * @param key
     * @return
     */
    public String getValue(String key){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String data = resource.get(key);
            closeJedis(resource);
            return data;
        }
        return null;
    }
    /**
     * 批量获取
     * @param kes
     * @return
     */
    public List<Object> getValues(List<String> kes){
        if(null != kes){
            Jedis resource = jedisPool.getResource();
            Pipeline pipelined = resource.pipelined();
            for(String key : kes){
                pipelined.get(key);
            }
            List<Object> list = pipelined.syncAndReturnAll();
            closeJedis(resource);
            pipelined.clear();
            try {
                pipelined.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            List<Object> data = new ArrayList<>();
            for(Object o : list){
                if(null != o){
                    data.add(o);
                }
            }
            return data;
        }
        return null;
    }
    /**
     * 删除key
     * @param key
     */
    public void remove(String key){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            Long del = resource.del(key);
            closeJedis(resource);
        }
    }
    /**
     * 删除资源
     * @param jedis
     */
    public void closeJedis(Jedis jedis){
        if(null != jedis){
            jedis.close();
        }
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/ResultUtil.java
New file
@@ -0,0 +1,191 @@
package com.dsh.competition.util;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * 定义统一返回对象
 */
@ApiModel(value = "统一返回结果集")
public class ResultUtil<T> {
    public static final Integer SUCCESS = 200;
    public static final Integer PARAM_ERROR = 300;
    public static final Integer RUNTIME_ERROR = 400;
    public static final Integer ERROR = 500;
    public static final Integer TOKEN_ERROR = 600;
    public static final Integer SIGN_ERROR = 700;
    public static final String Token = "TOKEN_INVALID";
    public static final String SIGN = "SIGN_INVALID";
    @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效")
    private Integer code;//备用状态码
    @ApiModelProperty(name = "msg", value = "返回结果说明")
    private String msg;//返回说明
    @ApiModelProperty(name = "data", value = "返回结果值")
    private T data;//返回数据
    public String getMsg() {
        return msg;
    }
    public T getData() {
        return data;
    }
    public Integer getCode() {
        return code;
    }
    private ResultUtil(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    private ResultUtil(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg){
        return new ResultUtil<>(code, msg);
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){
        return new ResultUtil<>(code, msg, data);
    }
    /**
     * 错误信息
     * @return
     */
    public static ResultUtil error(String mag){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, new JSONObject());
    }
    /**
     * 错误信息
     * @return
     */
    public static <T> ResultUtil <T> error(String mag, T obj){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, obj);
    }
    /**
     * token失效
     * @return
     */
    public static ResultUtil tokenErr(){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new JSONObject());
    }
    /**
     * token失效
     * @return
     */
    public static ResultUtil tokenErr(String msg){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new JSONObject());
    }
    /**
     * 参数异常
     * @return
     */
    public static  ResultUtil paranErr(){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new JSONObject());
    }
    /**
     * 参数异常
     * @return
     */
    public static <T> ResultUtil<T> paranErr(T data){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    @Autowired
    private static MessageUtils messageUtils;
    /**
     * 运行异常
     * @return
     */
    public static ResultUtil runErr(){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new JSONObject());
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data, String msg){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data);
    }
    /**
     * 返回成功
     * @param
     * @return
     */
    public static ResultUtil success(){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new JSONObject());
    }
    /**
     * 返回成功
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data);
    }
    /**
     * 返回成功
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(String msg, T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data);
    }
    /**
     * 签名无效
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> sign(){
        return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN);
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/StrUtils.java
New file
@@ -0,0 +1,102 @@
package com.dsh.competition.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class StrUtils {
    /**
     * 把逗号分隔的字符串转换字符串数组
     * Convert comma-separated string to string array.
     * @param str
     * @return
     */
    public static String[] splitStr2StrArr(String str,String split) {
        if (str != null && !str.equals("")) {
            return str.split(split);
        }
        return null;
    }
    /**
     * 把逗号分隔字符串转换List的Long
     *
     * @param str
     * @return
     */
    public static List<Long> splitStr2LongArr(String str) {
        String[] strings = splitStr2StrArr(str,",");
        if (strings == null) return null;
        List<Long> result = new ArrayList<>();
        for (String string : strings) {
            result.add(Long.parseLong(string));
        }
        return result;
    }
    /**
     * 把逗号分隔字符串转换List的Long
     *
     * @param str
     * @return
     */
    public static List<Long> splitStr2LongArr(String str,String split) {
        String[] strings = splitStr2StrArr(str,split);
        if (strings == null) return null;
        List<Long> result = new ArrayList<>();
        for (String string : strings) {
            result.add(Long.parseLong(string));
        }
        return result;
    }
    public static String getRandomString(int length) {
        String str = "0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(10);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String getComplexRandomString(int length) {
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(62);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String getClassCodeString(int length) {
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number =random.nextInt(36);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String convertPropertiesToHtml(String properties){
        //1:容量:6:32GB_4:样式:12:塑料壳
        StringBuilder sBuilder = new StringBuilder();
        String[] propArr = properties.split("_");
        for (String props : propArr) {
            String[] valueArr = props.split(":");
            sBuilder.append(valueArr[1]).append(":").append(valueArr[3]).append("<br>");
        }
        return sBuilder.toString();
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/StringUtil.java
New file
@@ -0,0 +1,25 @@
package com.dsh.competition.util;
import cn.mb.cloud.common.core.exception.BusinessException;
import org.springframework.util.StringUtils;
/**
 * 判断字符串不能为空和null,以及号码格式效验,
 * 否则则抛出异常信息
 */
public class StringUtil {
    private StringUtil() {
    }
    public static void checkNull(String str, String message) throws BusinessException {
        if (!StringUtils.hasLength(str)) {
            throw new BusinessException(message);
        }
    }
    public static void checkFormat(String str, String message) throws BusinessException {
        if (!str.matches("^1[2|3|4|5|6|7|8|9][0-9]{9}$")) {
            throw new BusinessException(message);
        }
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/StudyTimeUtil.java
New file
@@ -0,0 +1,37 @@
package com.dsh.competition.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
//根据当前传入的时间,返回距离当前时间多少天
public class StudyTimeUtil {
    private StudyTimeUtil() {
    }
    /**
     * 获取两个时间的间隔(秒)Obtain the time difference between two instances (in seconds).
     *
     * @param startDate 开始的时间
     * @return 返回当前时间与开始时间的相差天数
     */
    public static int getDateBetween(Date startDate) throws ParseException {
        Date endDate = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        long startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime();
        long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime();
        int days = (int)((endDateTime - startDateTime)  / (1000 * 3600 * 24));
        return days;
    }
    public static Date getStartDate(LocalDateTime localDate) {
        Date date = Date.from(localDate.atZone(ZoneId.systemDefault()).toInstant());
        return date;
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/TokenUtil.java
New file
@@ -0,0 +1,32 @@
package com.dsh.competition.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public class TokenUtil {
    @Autowired
    private RedisUtil redisUtil;
    public Integer getUserIdFormRedis(HttpServletRequest request) throws Exception {
        String requestHeader = request.getHeader("Authorization");
        if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
            requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1);
            String key = null;
            int length = requestHeader.length();
            if(length > 32){
                key = requestHeader.substring(length - 32);
            }else{
                key = requestHeader;
            }
            String value = redisUtil.getValue(key);
            return null != value ? Integer.valueOf(value) : null;
        }else{
            return null;
        }
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/Auth.java
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/Base64Utils.java
New file
@@ -0,0 +1,48 @@
package com.dsh.competition.util.akeylogin;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Utils {
    private static final Charset DEFAULT_CHARSET;
    public Base64Utils() {
    }
    public static byte[] encode(byte[] src) {
        return src.length == 0 ? src : Base64.getEncoder().encode(src);
    }
    public static byte[] decode(byte[] src) {
        return src.length == 0 ? src : Base64.getDecoder().decode(src);
    }
    public static byte[] encodeUrlSafe(byte[] src) {
        return src.length == 0 ? src : Base64.getUrlEncoder().encode(src);
    }
    public static byte[] decodeUrlSafe(byte[] src) {
        return src.length == 0 ? src : Base64.getUrlDecoder().decode(src);
    }
    public static String encodeToString(byte[] src) {
        return src.length == 0 ? "" : new String(encode(src), DEFAULT_CHARSET);
    }
    public static byte[] decodeFromString(String src) {
        return src.isEmpty() ? new byte[0] : decode(src.getBytes(DEFAULT_CHARSET));
    }
    public static String encodeToUrlSafeString(byte[] src) {
        return new String(encodeUrlSafe(src), DEFAULT_CHARSET);
    }
    public static byte[] decodeFromUrlSafeString(String src) {
        return decodeUrlSafe(src.getBytes(DEFAULT_CHARSET));
    }
    static {
        DEFAULT_CHARSET = StandardCharsets.UTF_8;
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/BaseUtils.java
New file
@@ -0,0 +1,23 @@
package com.dsh.competition.util.akeylogin;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
public class BaseUtils {
    public static boolean isEmpty(Object target) {
        if (target == null) {
            return true;
        }
        if (target instanceof String && "".equals(target)) {
            return true;
        } else if (target instanceof Collection) {
            return ((Collection<?>) target).isEmpty();
        } else if (target instanceof Map) {
            return ((Map<?, ?>) target).isEmpty();
        } else if (target.getClass().isArray()) {
            return Array.getLength(target) == 0;
        }
        return false;
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/DES.java
New file
@@ -0,0 +1,90 @@
package com.dsh.competition.util.akeylogin;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
public class DES {
    public static final String ALGORITHM = "DES";
    public static final String PADDING = "DES/CBC/PKCS5Padding";
    private static final byte[] DEFAULT_INITIALIZATION_VECTOR = ("00000000".getBytes());
    private String padding = PADDING;
    private byte[] initializationVectorBytes = DEFAULT_INITIALIZATION_VECTOR;
    private AlgorithmParameterSpec paramSpec;
    public DES() {
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(String padding) {
        this.padding = padding;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(String padding, byte[] initializationVectorBytes) {
        this.padding = padding;
        this.initializationVectorBytes = initializationVectorBytes;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(byte[] initializationVectorBytes) {
        this.initializationVectorBytes = initializationVectorBytes;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public byte[] encodeBytes(byte[] data, byte[] key) throws Exception {
        Key secretKey = getKey(key);
        Cipher cipher = Cipher.getInstance(padding);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec);
        byte[] bytes = cipher.doFinal(data);
        return bytes;
    }
    public byte[] decodeBytes(byte[] data, byte[] key) throws Exception {
        Key secretKey = getKey(key);
        Cipher cipher = Cipher.getInstance(padding);
        cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);
        return cipher.doFinal(data);
    }
    public String getPadding() {
        return padding;
    }
    public byte[] getInitializationVectorBytes() {
        return initializationVectorBytes;
    }
    private static Key getKey(byte[] key) throws Exception {
        DESKeySpec dks = new DESKeySpec(key);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
        SecretKey secretKey = keyFactory.generateSecret(dks);
        return secretKey;
    }
    public static byte[] decode(byte[] data, byte[] key) throws Exception {
        return decode(data, key, DEFAULT_INITIALIZATION_VECTOR);
    }
    public static byte[] encode(byte[] data, byte[] key) throws Exception {
        return encode(data, key, DEFAULT_INITIALIZATION_VECTOR);
    }
    public static byte[] decode(byte[] data, byte[] key, byte[] ivBytes) throws Exception {
        DES des = new DES(PADDING, ivBytes);
        return des.decodeBytes(data, key);
    }
    public static byte[] encode(byte[] data, byte[] key, byte[] ivBytes) throws Exception {
        DES des = new DES(PADDING, ivBytes);
        return des.encodeBytes(data, key);
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/LoginUtil.java
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/Md5Util.java
New file
@@ -0,0 +1,48 @@
package com.dsh.competition.util.akeylogin;
import java.security.MessageDigest;
public class Md5Util {
    private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    /**
     * MD5加密
     *
     * @param origin      字符
     * @param charsetname 编码
     * @return
     */
    public static String MD5Encode(String origin, String charsetname) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (null == charsetname || "".equals(charsetname)) {
                resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
            } else {
                resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
            }
        } catch (Exception e) {
        }
        return resultString;
    }
    public static String byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }
    public static String byteToHexString(byte b) {
        int n = b;
        if (n < 0) {
            n += 256;
        }
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigIts[d1] + hexDigIts[d2];
    }
}
cloud-server-competition/src/main/java/com/dsh/competition/util/akeylogin/SignUtil.java
New file
@@ -0,0 +1,24 @@
package com.dsh.competition.util.akeylogin;
import java.util.Map;
import java.util.TreeMap;
public class SignUtil {
    private static String charset = "utf8";
    public static String getSign(Map<String, Object> data, String secret) {
        if (data == null) {
            return null;
        }
        //排序参数
        Map<String, Object> mappingList = new TreeMap<>(data);
        StringBuilder plainText= new StringBuilder();
        mappingList.forEach((k, v) -> {
            if (!"sign".equals(k) && !BaseUtils.isEmpty(v)) {
                plainText.append(String.format("%s=%s&", k, v));
            }
        });
        String substring = plainText.substring(0, plainText.length() - 1);
        return Md5Util.MD5Encode(substring + secret, charset);
    }
}
cloud-server-competition/src/main/java/com/dsh/course/advice/ControllerException.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/DateTimeHelper.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/DateUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/DoubleUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/EmojiUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/HeaderAuthUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/JsonUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/MessageUtils.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/RedisUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/ResultUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/StrUtils.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/StringUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/StudyTimeUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/TokenUtil.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/akeylogin/Base64Utils.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/akeylogin/BaseUtils.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/akeylogin/DES.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/akeylogin/Md5Util.java
File was deleted
cloud-server-competition/src/main/java/com/dsh/course/util/akeylogin/SignUtil.java
File was deleted
cloud-server-gateway/pom.xml
New file
@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.mb.cloud</groupId>
        <artifactId>mb-cloud-parent</artifactId>
        <version>1.1.3</version>
        <relativePath>../cloud-server-parent/pom.xml</relativePath>
    </parent>
    <artifactId>mb-cloud-gateway</artifactId>
    <packaging>jar</packaging>
    <name>网关</name>
    <description>网关</description>
    <dependencies>
        <dependency>
            <groupId>cn.mb.cloud</groupId>
            <artifactId>mb-cloud-common-gateway</artifactId>
        </dependency>
        <!--更改mybatis版本-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <dependency>    <!--swagger2-->
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <exclusions>
                <exclusion>
                    <groupId>io.swagge</groupId>
                    <artifactId>swagger-annotations</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.swagge</groupId>
                    <artifactId>swagger-models</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.22</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.22</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>magic-beans-releases</id>
            <url>http://maven.magic-beans.cn/nexus/content/repositories/releases/</url>
        </repository>
        <repository>
            <id>aliyun</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>
</project>
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/GatewayApplication.java
New file
@@ -0,0 +1,28 @@
package cn.mb.cloud.gateway;
import cn.mb.cloud.common.core.annotation.MBCloudApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;
import javax.annotation.PostConstruct;
import java.util.TimeZone;
/**
 * @author jason
 * 网关应用
 */
@MBCloudApplication
@ComponentScan({"cn.mb.cloud"})
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
    @PostConstruct
    void started() {
        TimeZone.setDefault(TimeZone.getTimeZone("GMT+7"));
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/AuthService.java
New file
@@ -0,0 +1,51 @@
package cn.mb.cloud.gateway.auth;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.net.URLDecoder;
import java.util.Map;
@Service
public class AuthService {
    private final static Logger log = LoggerFactory.getLogger(AuthService.class);
    public static final AuthService me = new AuthService();
    /**
     * 鉴权
     * @param appid
     * @param sign
     * @return
     */
    public ResultUtil checkSyncAuth(String appid, String uri, String sign, Map<String, Object> queryParams) {
        try {
            sign = URLDecoder.decode(sign, "UTF-8");
            if (StringUtils.isBlank(sign)) {
                return ResultUtil.sign();
            }
            // 1.鉴权
            String signUrl = AuthenticationKit.getSignUrl(uri, queryParams, "sign");
            signUrl = signUrl.replaceAll("& #40;", "\\(");
            signUrl = signUrl.replaceAll("& #41;", "\\)");
            String signUrlEncode = AuthenticationKit.signUrlEncode(signUrl, appid);
            if(sign.indexOf(" ") != -1 && signUrlEncode.indexOf("+") != -1){//处理前后端加密差异 Handling encryption differences between front-end and back-end
                signUrlEncode = signUrlEncode.replaceAll("\\+", " ");
            }
            // 签名无 not sign
            if (StringUtils.isBlank(sign) || !sign.equals(signUrlEncode)) {
                return ResultUtil.sign();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
        return ResultUtil.success();
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/AuthenticationKit.java
New file
@@ -0,0 +1,194 @@
package cn.mb.cloud.gateway.auth;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.util.MultiValueMap;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
 *
 * 接口鉴权工具类
 *
 * @author gwx 2017-12-23
 *
 */
public class AuthenticationKit {
    public static final String utf8="UTF-8";
    /**
     * 返回64 位 token
     *
     * @param key 自定义安全字符
     * @return
     * @throws Exception
     */
    public static String getToken(String key) throws Exception {
        // 随机生成 32位字符
        String salt = HashKit.generateSaltForSha256();
        // 获取当前时间
        long cur = System.currentTimeMillis();
        // 生成64位token
        String access_token = getToken256(key, salt, cur);
        return access_token;
    }
    /**
     * 返回64 位 token
     *
     * @param key
     * @return
     * @throws Exception
     */
    public static String getToken256(String key, String salt, long cur) throws Exception {
        // 生成64位token
        String access_token = HashKit.sha256(salt + cur + key);
        return access_token;
    }
    /**
     * 返回到秒
     *
     * @return
     */
    public static String createTimestamp() {
        long l = System.currentTimeMillis();
        return Long.toString(l / 1000);
    }
    /**
     * 返回noce 不带 短杠"-"
     *
     * @return
     */
    public static String createNonceStr() {
        return getUUID();
    }
    public static String getUUID() {
        UUID uuid = UUID.randomUUID();
        String str = uuid.toString();
        str = str.replaceAll("-", "");
        return str;
    }
    /**
     * 组装路径
     *
     * @param params
     * @return
     */
    public static String localSignParam(Map<String, Object> params) {
        return localSignUrl(null, params, false);
    }
    /**
     * 组装签名路径
     * @param url
     * @param params
     * @return
     */
    public static String localSignUrl(String url, Map<String, Object> params, boolean urlEncode) {
        Set<Map.Entry<String, Object>> entries = params.entrySet();
        List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
        // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
        //Sort all incoming parameters in ascending order according to the ASCII code of the field name (lexicographic order).
        Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
            public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
                return (o1.getKey()).toString().compareTo(o2.getKey());
            }
        });
        // 构造签名键值对的格式
        // Format for constructing key-value pairs for signatures
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String, Object> item : infoIds) {
            if (item.getKey() != null || item.getKey() != "") {
                String key = item.getKey();
                Object val = item.getValue();
                if (!(val == "" || val == null)) {
                    sb.append(key + "=" + val + "&");
                }
            }
        }
        return sb.substring(0, sb.length() - 1);
    }
    /**
     * 加密签名路径生成签名
     *
     * @param signUrl
     *            /token?appid=12345&timestamp=1512440267&nonce=12345
     * @param encryptKey
     * @return
     * @throws Exception
     */
    public static String signUrlEncode(String signUrl, String encryptKey) throws Exception {
        byte[] signByte = HMACSHA1.HmacSHA1Encrypt(signUrl, encryptKey);
        String localSign = Base64.getEncoder().encodeToString(signByte);
        return localSign;
    }
    /**
     * 服务端 获取 客户端请求 组装验证签名
     * @param delParams 移除不相关 的签名参数
     * @return
     */
    public static String getSignUrl(String url, Map<String, Object> queryParams, String... delParams) {
        // 获取相对的访问路径
        //Get the relative access path
        if (queryParams.size() > 0) {
            // 删除 Delete
            for (int i = 0, len = delParams.length; i < len; i++) {
                queryParams.remove(delParams[i]);
            }
            return localSignUrl(url, queryParams, false);
        }
        return null;
    }
    /**
     * 组装签名路径 客户端测试用
     * @param url api访问地址 "/apid"
     * @param appid
     * @return
     */
    public static String getSignUrl(String url, String appid, Map<String, String> queryParas) {
        Map<String, Object> params = new TreeMap<String, Object>();
        params.put("appid", appid);
        params.put("nonce", createNonceStr());
        params.put("timestamp", createTimestamp());
        if(queryParas!=null && queryParas.size()>0){
            params.putAll(queryParas);
        }
        return localSignUrl(url, params, false);
    }
    /**
     * 组装签名路径 客户端测试用
     * @param url api访问地址 "/apid"
     * @param appid
     * @return
     */
    public static String getSignUrl(String url, String appid) {
        return getSignUrl(url, appid, "");
    }
    /**
     *
     * @param url
     * @param appid
     * @param params
     * @return
     */
    public static String getSignUrl(String url, String appid, String params) {
        String urlTmp = getSignUrl(url, appid, new HashMap<String,String>());
        return urlTmp + UrlEncoderUtils.encode(params);
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/HMACSHA1.java
New file
@@ -0,0 +1,63 @@
package cn.mb.cloud.gateway.auth;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class HMACSHA1 {
    private static final String MAC_NAME = "HmacSHA1";
    private static final String ENCODING = "UTF-8";
    /*
     * 展示了一个生成指定算法密钥的过程 初始化HMAC密钥
     *
     * @return
     *
     * @throws Exception
     *
     * public static String initMacKey() throws Exception { //得到一个 指定算法密钥的密钥生成器
     * KeyGenerator KeyGenerator keyGenerator
     * =KeyGenerator.getInstance(MAC_NAME); //生成一个密钥 SecretKey secretKey
     * =keyGenerator.generateKey(); return null; }
     */
    /**
     * 使用 HMAC-SHA1 签名方法对对encryptText进行签名
     *
     * @param encryptText
     *            被签名的字符串
     * @param encryptKey
     *            密钥
     * @return
     * @throws Exception
     */
    public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {
        byte[] data = encryptKey.getBytes(ENCODING);
        // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        Mac mac = Mac.getInstance(MAC_NAME);
        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
        // 生成一个指定 Mac 算法 的 Mac 对象
        // 用给定密钥初始化 Mac 对象
        mac.init(secretKey);
        byte[] text = encryptText.getBytes(ENCODING);
        // 完成 Mac 操作
        return mac.doFinal(text);
    }
//    public static void main(String[] args) {
//
//        String encryptText = "123";
//        String encryptKey = "adc";
//        try {
//            byte[] b = HmacSHA1Encrypt(encryptText, encryptKey);
//            String str = HashKit.toHex(b);
//            String str2 = new String(Base64.getEncoder().encodeToString(b));
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/HashKit.java
New file
@@ -0,0 +1,109 @@
package cn.mb.cloud.gateway.auth;
/**
 * Copyright (c) 2011-2017, James Zhan 詹波 (jfinal@126.com).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import java.security.MessageDigest;
public class HashKit {
    public static final long FNV_OFFSET_BASIS_64 = 0xcbf29ce484222325L;
    public static final long FNV_PRIME_64 = 0x100000001b3L;
    private static final java.security.SecureRandom random = new java.security.SecureRandom();
    private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
    private static final char[] CHAR_ARRAY = "_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
            .toCharArray();
    public static long fnv1a64(String key) {
        long hash = FNV_OFFSET_BASIS_64;
        for (int i = 0, size = key.length(); i < size; i++) {
            hash ^= key.charAt(i);
            hash *= FNV_PRIME_64;
        }
        return hash;
    }
    public static String md5(String srcStr) {
        return hash("MD5", srcStr);
    }
    public static String sha1(String srcStr) {
        return hash("SHA-1", srcStr);
    }
    public static String sha256(String srcStr) {
        return hash("SHA-256", srcStr);
    }
    public static String sha384(String srcStr) {
        return hash("SHA-384", srcStr);
    }
    public static String sha512(String srcStr) {
        return hash("SHA-512", srcStr);
    }
    public static String hash(String algorithm, String srcStr) {
        try {
            MessageDigest md = MessageDigest.getInstance(algorithm);
            byte[] bytes = md.digest(srcStr.getBytes("utf-8"));
            return toHex(bytes);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    public static String toHex(byte[] bytes) {
        StringBuilder ret = new StringBuilder(bytes.length * 2);
        for (int i = 0; i < bytes.length; i++) {
            ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
            ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
        }
        return ret.toString();
    }
    /**
     * md5 128bit 16bytes sha1 160bit 20bytes sha256 256bit 32bytes sha384
     * 384bit 48bytes sha512 512bit 64bytes
     */
    public static String generateSalt(int saltLength) {
        StringBuilder salt = new StringBuilder(saltLength);
        for (int i = 0; i < saltLength; i++) {
            salt.append(CHAR_ARRAY[random.nextInt(CHAR_ARRAY.length)]);
        }
        return salt.toString();
    }
    public static String generateSaltForSha256() {
        return generateSalt(32);
    }
    public static String generateSaltForSha512() {
        return generateSalt(64);
    }
    public static boolean slowEquals(byte[] a, byte[] b) {
        if (a == null || b == null) {
            return false;
        }
        int diff = a.length ^ b.length;
        for (int i = 0; i < a.length && i < b.length; i++) {
            diff |= a[i] ^ b[i];
        }
        return diff == 0;
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/ResultUtil.java
New file
@@ -0,0 +1,185 @@
package cn.mb.cloud.gateway.auth;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * 定义统一返回对象
 */
@ApiModel(value = "统一返回结果集")
public class ResultUtil<T> {
    public static final Integer SUCCESS = 200;
    public static final Integer PARAM_ERROR = 300;
    public static final Integer RUNTIME_ERROR = 400;
    public static final Integer ERROR = 500;
    public static final Integer TOKEN_ERROR = 600;
    public static final Integer SIGN_ERROR = 700;
    public static final String Token = "TOKEN_INVALID";
    public static final String SIGN = "SIGN_INVALID";
    @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效")
    private Integer code;//备用状态码
    @ApiModelProperty(name = "msg", value = "返回结果说明")
    private String msg;//返回说明
    @ApiModelProperty(name = "data", value = "返回结果值")
    private T data;//返回数据
    public String getMsg() {
        return msg;
    }
    public T getData() {
        return data;
    }
    public Integer getCode() {
        return code;
    }
    private ResultUtil(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public static ResultUtil getResult(Integer code, String msg){
        return new ResultUtil<>(code, msg, new Object());
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){
        return new ResultUtil<>(code, msg, data);
    }
    /**
     * 错误信息
     * @return
     */
    public static ResultUtil error(String mag){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, new Object());
    }
    /**
     * 错误信息
     * @return
     */
    public static <T> ResultUtil <T> error(String mag, T obj){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, obj);
    }
    /**
     * token失效
     * @return
     */
    public static ResultUtil tokenErr(){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new Object());
    }
    /**
     * token失效
     * @return
     */
    public static ResultUtil tokenErr(String msg){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new Object());
    }
    /**
     * 参数异常
     * @return
     */
    public static  ResultUtil paranErr(){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new Object());
    }
    /**
     * 参数异常
     * @return
     */
    public static <T> ResultUtil<T> paranErr(T data){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    /**
     * 运行异常
     * @return
     */
    public static ResultUtil runErr(){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new Object());
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data, String msg){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data);
    }
    /**
     * 返回成功
     * @param
     * @return
     */
    public static ResultUtil success(){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new Object());
    }
    /**
     * 返回成功
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data);
    }
    /**
     * 返回成功
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(String msg, T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data);
    }
    /**
     * 签名无效
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> sign(){
        return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN);
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/UrlEncoderUtils.java
New file
@@ -0,0 +1,44 @@
package cn.mb.cloud.gateway.auth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class UrlEncoderUtils {
    private static final String PATH_DELIMITER = "/";
    private static final Logger log = LoggerFactory.getLogger(UrlEncoderUtils.class);
    public static String encode(String originUrl) {
        try {
            return URLEncoder.encode(originUrl, "UTF-8").replace("+", "%20").replace("*", "%2A")
                    .replace("%7E", "~");
        } catch (UnsupportedEncodingException e) {
            log.error("URLEncoder error, encode utf8, exception: {}", e);
        }
        return null;
    }
    // encode路径, 不包括分隔符
    public static String encodeEscapeDelimiter(String urlPath) {
        StringBuilder pathBuilder = new StringBuilder();
        String[] pathSegmentsArr = urlPath.split(PATH_DELIMITER);
        boolean isFirstSegMent = true;
        for (String pathSegment : pathSegmentsArr) {
            if (isFirstSegMent) {
                pathBuilder.append(encode(pathSegment));
                isFirstSegMent = false;
            } else {
                pathBuilder.append(PATH_DELIMITER).append(encode(pathSegment));
            }
        }
        if (urlPath.endsWith(PATH_DELIMITER)) {
            pathBuilder.append(PATH_DELIMITER);
        }
        return pathBuilder.toString();
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/config/RedisConfig.java
New file
@@ -0,0 +1,56 @@
package cn.mb.cloud.gateway.config;
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 redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
@PropertySource("classpath:redis.properties")
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.timeout}")
    private int timeout;
    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.jedis.pool.min-idle}")
    private int minIdle;
    @Value("${spring.redis.jedis.pool.max-wait}")
    private long maxWaitMillis;
    @Value("${spring.redis.jedis.pool.max-active}")
    private int maxTotal;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.block-when-exhausted}")
    private boolean  blockWhenExhausted;
    @Bean
    public JedisPool redisPoolFactory()  throws Exception{
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMinIdle(minIdle);
        jedisPoolConfig.setMaxTotal(maxTotal);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
        // 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
        //When the connection is exhausted, if it is set to false, it will throw an exception. If set to true, it will block until timeout. By default, it is set to true.
        jedisPoolConfig.setBlockWhenExhausted(blockWhenExhausted);
        // 是否启用pool的jmx管理功能, 默认true
        //Enable JMX management for pool, default is set to true.
        jedisPoolConfig.setJmxEnabled(true);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
        return jedisPool;
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/config/SwaggerResourceController.java
New file
@@ -0,0 +1,40 @@
package cn.mb.cloud.gateway.config;
import cn.mb.cloud.common.gateway.config.SwaggerProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.swagger.web.*;
import java.util.List;
/**
 * swagger聚合接口,swagger-ui.html需要访问的接口
 */
@RestController
@RequestMapping("/swagger-resources")
public class SwaggerResourceController {
    private SwaggerProvider swaggerProvider;
    @Autowired
    public SwaggerResourceController(SwaggerProvider swaggerProvider) {
        this.swaggerProvider = swaggerProvider;
    }
    @RequestMapping(value = "/configuration/security")
    public ResponseEntity<SecurityConfiguration> securityConfiguration() {
        return new ResponseEntity<>(SecurityConfigurationBuilder.builder().build(), HttpStatus.OK);
    }
    @RequestMapping(value = "/configuration/ui")
    public ResponseEntity<UiConfiguration> uiConfiguration() {
        return new ResponseEntity<>(UiConfigurationBuilder.builder().build(), HttpStatus.OK);
    }
    @RequestMapping
    public ResponseEntity<List<SwaggerResource>> swaggerResources() {
        return new ResponseEntity<>(swaggerProvider.get(), HttpStatus.OK);
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/PermissionsFilter.java
New file
@@ -0,0 +1,403 @@
/*
 * Copyright 2018-2020 by jason. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted,
 * provided that the above copyright notice appear in all copies and that
 * both that copyright notice and this permission notice appear in
 * supporting documentation, and that the name of Vinay Sajip
 * not be used in advertising or publicity pertaining to distribution
 * of the software without specific, written prior permission.
 * VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
 * VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 */
package cn.mb.cloud.gateway.filter;
import cn.mb.cloud.common.gateway.common.PermissionResult;
import cn.mb.cloud.common.gateway.config.FilterIgnorePropertiesConfig;
import cn.mb.cloud.gateway.auth.AuthService;
import cn.mb.cloud.gateway.auth.ResultUtil;
import cn.mb.cloud.gateway.handler.AppTypeContextHolder;
import cn.mb.cloud.gateway.util.RedisUtil;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.*;
/**
 * @author: jason
 * @Date: 2019-05-20 15:50
 * @Description:
 */
@Slf4j
@Component
public class PermissionsFilter implements GlobalFilter, Ordered {
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private FilterIgnorePropertiesConfig filterIgnorePropertiesConfig;
    @Autowired
    AuthService authService;
    @Value("${cn.mbcloud.gateway.permissions.basic}")
    private Boolean isBasic = Boolean.FALSE;
    private AntPathMatcher pathMatcher = new AntPathMatcher();
    /**
     * Redis Token 仓库前缀
     */
    private String REDIS_TOKEN_STORE_PREFIX = "oauth2_";
    /**
     * 账户
     */
    @Value("${ignore.account.prefix}")
    private String IGNORE_ACCOUNT_PREFIX;
    /**
     * 账户
     */
    @Value("${ignore.account.uris}")
    private String IGNORE_ACCOUNT_URIS;
    /**
     * 福利
     */
    @Value("${ignore.activity.prefix}")
    private String IGNORE_ACTIVITY_PREFIX;
    /**
     * 福利
     */
    @Value("${ignore.activity.uris}")
    private String IGNORE_ACTIVITY_URIS;
    /**
     * 赛事
     */
    @Value("${ignore.competition.prefix}")
    private String IGNORE_COMPETITION_PREFIX;
    /**
     * 赛事
     */
    @Value("${ignore.competition.uris}")
    private String IGNORE_COMPETITION_URIS;
    /**
     * 课程
     */
    @Value(("${ignore.course.prefix}"))
    private String IGNORE_COURSE_PREFIX;
    /**
     * 课程
     */
    @Value(("${ignore.course.uris}"))
    private String IGNORE_COURSE_URIS;
    /**
     * 其他
     */
    @Value(("${ignore.other.prefix}"))
    private String IGNORE_OTHER_PREFIX;
    /**
     * 其他
     */
    @Value(("${ignore.other.uris}"))
    private String IGNORE_OTHER_URIS;
    /**
     * 管理后台
     */
    @Value(("${ignore.management.prefix}"))
    private String IGNORE_MANAGEMENT_PREFIX;
    /**
     * 管理后台
     */
    @Value(("${ignore.management.uris}"))
    private String IGNORE_MANAGEMENT_URIS;
    @Override
    public int getOrder() {
        return -1;
    }
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        String appType = request.getHeaders().getFirst(AppTypeContextHolder.APP_TYPE);
        AppTypeContextHolder.setDeviceType(appType);
        PermissionResult permissionResult = hasPermission(exchange, request);
        AppTypeContextHolder.clear();
        //token无效 invaild token
        if (permissionResult == PermissionResult.TOKEN_INVALID) {
            response.setRawStatusCode(200);
            byte[] bits = JSON.toJSONBytes(ResultUtil.tokenErr());
            DataBuffer buffer = response.bufferFactory().wrap(bits);
            HttpHeaders headers = response.getHeaders();
            String first = headers.getFirst("Content-Type");
            if(StringUtils.isEmpty(first)){
                headers.add("Content-Type", "application/json;charset=UTF-8");
            }
            return response.writeWith(Mono.just(buffer));
        }
        if (permissionResult != PermissionResult.PASS) {
            response.setRawStatusCode(permissionResult.getValue());
            byte[] bits = JSON.toJSONBytes(permissionResult.getName());
            DataBuffer buffer = response.bufferFactory().wrap(bits);
            HttpHeaders headers = response.getHeaders();
            String first = headers.getFirst("Content-Type");
            if(StringUtils.isEmpty(first)){
                headers.add("Content-Type", "application/json;charset=UTF-8");
            }
            return response.writeWith(Mono.just(buffer));
        }
        //校验参数签名 Verify parameter signature
        ResultUtil resultUtil = preHandle(request);
        if(resultUtil.getCode() != 200){
            log.info("签名异常");
            response.setRawStatusCode(resultUtil.getCode());
            byte[] bits = JSON.toJSONBytes(resultUtil);
            DataBuffer buffer = response.bufferFactory().wrap(bits);
            HttpHeaders headers = response.getHeaders();
            String first = headers.getFirst("Content-Type");
            if(StringUtils.isEmpty(first)){
                headers.add("Content-Type", "application/json;charset=UTF-8");
            }
            return response.writeWith(Mono.just(buffer));
        }
        return chain.filter(exchange.mutate().request(request.mutate().build()).build());
    }
    public ResultUtil preHandle(ServerHttpRequest req) {
        String uri = req.getURI().getRawPath();
        if(uri.contains("v2/api-docs")){
            return ResultUtil.success();
        }
        if(uri.contains("/oauth")){
            return ResultUtil.success();
        }
        if(uri.contains("/base")){
            return ResultUtil.success();
        }
        String appid = "BT7NPhA0f775uzcUuftWjCE1TYZlWmHZ";
        Map<String, Object> queryParams = QueryParamsUtil.getQueryParams(req);
        String sign = (String)queryParams.get("sign");
        if(org.springframework.util.StringUtils.isEmpty(sign)){
            return ResultUtil.sign();
        }
        return authService.checkSyncAuth(appid, uri, sign, queryParams);
    }
    public PermissionResult hasPermission(ServerWebExchange exchange, ServerHttpRequest request) {
        String uri = request.getURI().getRawPath();
        if(uri.contains("v2/api-docs")){
            return PermissionResult.PASS;
        }
        String token = getAccessToken(request);
        //账户
        if (uri.startsWith(IGNORE_ACCOUNT_PREFIX)) {
            if(!StringUtils.isEmpty(IGNORE_ACCOUNT_URIS)){
                String[] split = IGNORE_ACCOUNT_URIS.split(",");
                for (String s : split) {
                    if (uri.contains(s)) {
                        return PermissionResult.PASS;
                    }
                }
            }
        }
        //福利
        if (uri.startsWith(IGNORE_ACTIVITY_PREFIX)) {
            if(!StringUtils.isEmpty(IGNORE_ACTIVITY_URIS)){
                String[] split = IGNORE_ACTIVITY_URIS.split(",");
                for (String s : split) {
                    if (uri.contains(s)) {
                        return PermissionResult.PASS;
                    }
                }
            }
        }
        //赛事
        if (uri.startsWith(IGNORE_COMPETITION_PREFIX)) {
            if(!StringUtils.isEmpty(IGNORE_COMPETITION_URIS)){
                String[] split = IGNORE_COMPETITION_URIS.split(",");
                for (String s : split) {
                    if (uri.contains(s)) {
                        return PermissionResult.PASS;
                    }
                }
            }
        }
        //课程
        if (uri.startsWith(IGNORE_COURSE_URIS)) {
            if(!StringUtils.isEmpty(IGNORE_COURSE_URIS)){
                String[] split = IGNORE_COURSE_URIS.split(",");
                for (String s : split) {
                    if (uri.contains(s)) {
                        return PermissionResult.PASS;
                    }
                }
            }
        }
        //其他
        if (uri.startsWith(IGNORE_OTHER_PREFIX)) {
            if(!StringUtils.isEmpty(IGNORE_OTHER_URIS)){
                String[] split = IGNORE_OTHER_URIS.split(",");
                for (String s : split) {
                    if (uri.contains(s)) {
                        return PermissionResult.PASS;
                    }
                }
            }
        }
        // ----------------------------------------------------------------- 放行综合后台授权登录-UPMS
        if (uri.startsWith(IGNORE_MANAGEMENT_PREFIX)) {
            if(!StringUtils.isEmpty(IGNORE_MANAGEMENT_URIS)){
                String[] split = IGNORE_MANAGEMENT_URIS.split(",");
                for (String s : split) {
                    if (uri.contains(s)) {
                        return PermissionResult.PASS;
                    }
                }
            }
            String value = redisUtil.getValue(token.substring(token.length() - 32));
            if(StringUtils.isEmpty(value)){
                log.warn("Redis Token Store未找到对应的令牌,accessToken:" + token);
                return PermissionResult.TOKEN_INVALID;
            }
            return PermissionResult.PASS;
//            String accessToken = getAccessToken(request);
//            if (StringUtils.isEmpty(accessToken)) {
//                log.warn("访问令牌为空,accessToken:" + accessToken);
//                return PermissionResult.TOKEN_INVALID;
//            }
//
//            boolean hasAuth = LoginHelper.userExist(accessToken);
//            if (!hasAuth) {
//                log.warn("Redis Token Store未找到对应的令牌,accessToken:" + accessToken);
//                return PermissionResult.TOKEN_INVALID;
//            } else {
//                if (!LoginHelper.isExpired(LoginHelper.getUser(accessToken))) {
//                    log.warn("访问令牌已过期,accessToken:" + accessToken);
//                    return PermissionResult.TOKEN_EXPIRED;
//                }
//                LoginHelper.update(LoginHelper.getUser(accessToken), 86400000L);
//                return PermissionResult.PASS;
//            }
        }
        // 判断是否是忽略列表中的
        //Check if it is in the ignore list.
        if (!filterIgnorePropertiesConfig.getPermissionUrls().isEmpty()) {
            Optional<String> optional = filterIgnorePropertiesConfig.getPermissionUrls().stream().filter(url -> pathMatcher.match(url, uri)).findFirst();
            if (optional.isPresent()) {
                return PermissionResult.PASS;
            }
        }
        if (StringUtils.isEmpty(token)) {
            log.warn("访问令牌为空,accessToken:" + token);
            return PermissionResult.TOKEN_INVALID;
        }
//        OAuth2AccessToken oAuth2AccessToken = redisTokenStore.readAccessToken(token);
//        if (oAuth2AccessToken == null) {
//            log.warn("Redis Token Store未找到对应的令牌,accessToken:" + token);
//            return PermissionResult.TOKEN_INVALID;
//        }
//        if (oAuth2AccessToken.isExpired()) {
//            log.warn("访问令牌已过期,accessToken:" + token);
//            return PermissionResult.TOKEN_EXPIRED;
//        }
//        Long userId = (Long) oAuth2AccessToken.getAdditionalInformation().get("user_id");
//        String username = (String) oAuth2AccessToken.getAdditionalInformation().get("username");
//        //用户令牌有效则进行用户信息的注入到头信息中
//        request.mutate().header("userId", userId.toString()).header("username", username);
//        //是否开启简单认证模式如果开启则不验证URL权限只验证是否拥有token的合法性
//        if (isBasic) {
//            return PermissionResult.PASS;
//        }
//        HashSet<String> permissions = (HashSet<String>) redisTemplate.opsForValue().get(SecurityConstants.CACHE_USER_PERMISSIONS_KEY + "urls:" + userId);
//        if (permissions == null || permissions.isEmpty()) {
//            log.warn("用户URL权限为空,urlSet:" + JSON.toJSONString(permissions));
//            return PermissionResult.FORBIDDEN;
//        }
//        Optional<String> optional = permissions.stream().filter(url -> pathMatcher.match(url, uri)).findFirst();
        String value = redisUtil.getValue(token.substring(token.length() - 32));
        if(StringUtils.isEmpty(value)){
            log.warn("Redis Token Store未找到对应的令牌,accessToken:" + token);
            return PermissionResult.TOKEN_INVALID;
        }
        return PermissionResult.PASS;
    }
    /**
     * 获取请求中token
     *
     * @param request
     * @return token
     */
    private String getAccessToken(ServerHttpRequest request) {
        String headerValue = request.getHeaders().getFirst("Authorization");
        if (StringUtils.isEmpty(headerValue)) {
            return null;
        }
        final String bearerType = OAuth2AccessToken.BEARER_TYPE.toLowerCase();
        if (headerValue.toLowerCase().startsWith(bearerType)) {
            String substring = headerValue.substring(bearerType.length());
            return substring.trim();
        } else {
            return headerValue;
        }
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/QueryParamsUtil.java
New file
@@ -0,0 +1,113 @@
package cn.mb.cloud.gateway.filter;
import cn.mb.cloud.gateway.model.HeaderParams;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.util.MultiValueMap;
import reactor.core.publisher.Flux;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class QueryParamsUtil {
    /**
     * 获取请求参数
     * @param request
     * @return
     */
    public static Map<String, Object> getQueryParams(ServerHttpRequest request) {
        HttpMethod method = request.getMethod();
        Map<String, Object> map = new HashMap<>();
        if("POST".equals(method.name())){
            MultiValueMap<String, String> queryParams = request.getQueryParams();
            Set<String> keySet = queryParams.keySet();
            for (String s : keySet) {
                try {
                    map.put(s, URLDecoder.decode(queryParams.getFirst(s), "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
            Flux<DataBuffer> body = request.getBody();
            body.subscribe(dataBuffer -> {
                byte[] bytes = new byte[dataBuffer.readableByteCount()];
                dataBuffer.read(bytes);
                String bodyStr = new String(bytes, StandardCharsets.UTF_8);
                String[] param = bodyStr.split("&");
                for (String s : param) {
                    String[] split = s.split("=");
                    try {
                        map.put(split[0], split.length == 1 ? "" : URLDecoder.decode(split[1], "UTF-8"));
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
            });
        }else{
            MultiValueMap<String, String> queryParams = request.getQueryParams();
            Set<String> keySet = queryParams.keySet();
            for (String s : keySet) {
                try {
                    map.put(s, URLDecoder.decode(queryParams.getFirst(s), "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        }
        return map;
    }
    /**
     * 获取原始Header
     * @param request
     * @return
     */
    public static Map<String, Object> getOriginalHeaderParams(ServerHttpRequest request) {
        HttpHeaders headers = request.getHeaders();
        Map<String, Object> map = new HashMap<>();
        Set<String> keySet = headers.keySet();
        for (String s : keySet) {
            map.put(s, headers.getFirst(s));
        }
        return map;
    }
    /**
     * 获取请求header
     * @param request
     * @return
     */
    public static HeaderParams getHeaderParams(ServerHttpRequest request) {
        String authorization = request.getHeaders().getFirst("Authorization");
        String role = request.getHeaders().getFirst("role");
        String from = request.getHeaders().getFirst("from");
        String version = request.getHeaders().getFirst("version");
        String deviceid = request.getHeaders().getFirst("deviceid");
        String nonce = request.getHeaders().getFirst("nonce");
        String timestamp = request.getHeaders().getFirst("timestamp");
        HeaderParams headerParams = new HeaderParams();
        headerParams.setAuthorization(authorization);
        headerParams.setRole(role);
        headerParams.setFrom(from);
        headerParams.setVersion(version);
        headerParams.setDeviceid(deviceid);
        headerParams.setNonce(nonce);
        headerParams.setTimestamp(timestamp);
        return headerParams;
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/RequestParamFilter.java
New file
@@ -0,0 +1,38 @@
package cn.mb.cloud.gateway.filter;
import cn.mb.cloud.gateway.model.HeaderParams;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.Map;
/**
 * 日志拦截器
 */
@Slf4j
@Component
public class RequestParamFilter implements GlobalFilter, Ordered {
    @Override
    public int getOrder() {
        return -1;
    }
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        String uri = request.getURI().getRawPath();
        Map<String, Object> queryParams = QueryParamsUtil.getQueryParams(request);
        Map<String, Object> headerParams = QueryParamsUtil.getOriginalHeaderParams(request);
        log.info("请求操作 -> " + uri + " || 请求参数 -> " + JSON.toJSONString(queryParams) + " || Header信息 -> " + JSON.toJSONString(headerParams));
        return chain.filter(exchange);
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java
New file
@@ -0,0 +1,80 @@
package cn.mb.cloud.gateway.filter;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.reactivestreams.Publisher;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
/**
 * 日志拦截器
 */
@Slf4j
@Component
public class ResponseParamFilter implements GlobalFilter, Ordered {
    @Override
    public int getOrder() {
        return -1;
    }
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        try {
            ServerHttpRequest request = exchange.getRequest();
            String uri = request.getURI().getRawPath();
            ServerHttpResponse originalResponse = exchange.getResponse();
            DataBufferFactory bufferFactory = originalResponse.bufferFactory();
            HttpStatus statusCode = originalResponse.getStatusCode();
            if(statusCode == HttpStatus.OK){
                ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
                    @Override
                    public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
                        if (body instanceof Flux) {
                            Flux<? extends DataBuffer> fluxBody = Flux.from(body);
                            return super.writeWith(fluxBody.map(dataBuffer -> {
                                byte[] content = new byte[dataBuffer.readableByteCount()];
                                dataBuffer.read(content);
                                DataBufferUtils.release(dataBuffer);//释放掉内存 Release memory
                                // 构建日志 build Journal
                                StringBuffer sb = new StringBuffer();
                                sb.append(" 响应操作 -> " + uri + " || 响应参数-> {} \n");
                                List<Object> rspArgs = new ArrayList<>();
                                rspArgs.add(originalResponse.getStatusCode());
                                String data = new String(content, StandardCharsets.UTF_8);//data
                                sb.append(data);
                                log.info(sb.toString(), rspArgs.toArray());
                                return bufferFactory.wrap(content);
                            }));
                        } else {
                            log.error("响应操作 -> " + uri + " || 响应参数-> {} \n", getStatusCode());
                        }
                        return super.writeWith(body);
                    }
                };
                return chain.filter(exchange.mutate().response(decoratedResponse).build());
            }
            return chain.filter(exchange);//降级处理返回数据 Downgrade processing returns data
        }catch (Exception e){
            log.error("gateway log exception.\n" + e);
            return chain.filter(exchange);
        }
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java
New file
@@ -0,0 +1,60 @@
package cn.mb.cloud.gateway.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.*;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
import java.util.Set;
@Slf4j
@Component
public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
    @Override
    public int getOrder() {
        return Ordered.HIGHEST_PRECEDENCE;
    }
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest req = exchange.getRequest();
        ServerHttpResponse res = exchange.getResponse();
        String method = req.getMethodValue();
        MediaType ct = req.getHeaders().getContentType();
        if (HttpMethod.POST.matches(method)) {
            return DataBufferUtils.join(req.getBody()).flatMap(dataBuffer -> {
                byte[] bytes = new byte[dataBuffer.readableByteCount()];
                dataBuffer.read(bytes);
//                String bodyStr = new String(bytes, StandardCharsets.UTF_8);
//                exchange.getAttributes().put("POST_BODY", bodyStr);
                DataBufferUtils.release(dataBuffer);
                Flux<DataBuffer> cachedFlux = Flux.defer(() -> {
                    DataBuffer buffer = res.bufferFactory().wrap(bytes);
                    return Mono.just(buffer);
                });
                ServerHttpRequest mutateReq = new ServerHttpRequestDecorator(req) {
                    @Override
                    public Flux<DataBuffer> getBody() {
                        return cachedFlux;
                    }
                };
                return chain.filter(exchange.mutate().request(mutateReq).build());
            });
        }
        return chain.filter(exchange);
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/handler/AppTypeContextHolder.java
New file
@@ -0,0 +1,27 @@
package cn.mb.cloud.gateway.handler;
import com.alibaba.ttl.TransmittableThreadLocal;
public class AppTypeContextHolder {
    private final static ThreadLocal<String> DEVEICE_LOCAL = new TransmittableThreadLocal<>();
    public final static  String APP_TYPE="AppType";
    /**
     * 上下文中获取当
     * @param tenantId
     */
    public static void setDeviceType(String tenantId) {
        DEVEICE_LOCAL.set(tenantId);
    }
    public static String getDeviceType() {
        return DEVEICE_LOCAL.get();
    }
    public static void clear() {
        DEVEICE_LOCAL.remove();
    }
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/model/HeaderParams.java
New file
@@ -0,0 +1,35 @@
package cn.mb.cloud.gateway.model;
import lombok.Data;
@Data
public class HeaderParams {
    /**
     * token
     */
    private String authorization;
    /**
     * 权限
     */
    private String role;
    /**
     * 请求对象
     */
    private String from;
    /**
     * 当前版本号
     */
    private String version;
    /**
     * 设备id
     */
    private String deviceid;
    /**
     * 随机字符串
     */
    private String nonce;
    /**
     * 时间戳
     */
    private String timestamp;
}
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/util/RedisUtil.java
New file
@@ -0,0 +1,125 @@
package cn.mb.cloud.gateway.util;
import com.alibaba.csp.sentinel.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 * Redis工具类
 */
@Component
public class RedisUtil {
    @Autowired
    private JedisPool jedisPool;
    /**
     * 向redis中存储字符串没有过期时间
     * @param key
     * @param value
     */
    public void setStrValue(String key, String value){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String set = resource.set(key, value);
            closeJedis(resource);
        }
    }
    /**
     * 以分钟为单位设置存储值(设置过期时间)
     * @param key
     * @param value
     * @param time 秒
     */
    public void setStrValue(String key, String value, int time){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String setex = resource.setex(key, time, value);
            closeJedis(resource);
        }
    }
    /**
     * 从redis中获取值
     * @param key
     * @return
     */
    public String getValue(String key){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String data = resource.get(key);
            closeJedis(resource);
            return data;
        }
        return null;
    }
    /**
     * 批量获取
     * @param kes
     * @return
     */
    public List<Object> getValues(List<String> kes){
        if(null != kes){
            Jedis resource = jedisPool.getResource();
            Pipeline pipelined = resource.pipelined();
            for(String key : kes){
                pipelined.get(key);
            }
            List<Object> list = pipelined.syncAndReturnAll();
            closeJedis(resource);
            pipelined.clear();
            try {
                pipelined.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            List<Object> data = new ArrayList<>();
            for(Object o : list){
                if(null != o){
                    data.add(o);
                }
            }
            return data;
        }
        return null;
    }
    /**
     * 删除key
     * @param key
     */
    public void remove(String key){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            Long del = resource.del(key);
            closeJedis(resource);
        }
    }
    /**
     * 删除资源
     * @param jedis
     */
    public void closeJedis(Jedis jedis){
        if(null != jedis){
            jedis.close();
        }
    }
}
cloud-server-gateway/src/main/resources/bootstrap.properties
New file
@@ -0,0 +1,20 @@
spring.profiles.active=@profiles.active@
spring.application.name=@artifactId@
spring.cloud.nacos.username=@profiles.nacos-username@
spring.cloud.nacos.password=@profiles.nacos-password@
spring.cloud.nacos.config.server-addr=@profiles.nacos-addr@
spring.cloud.nacos.config.namespace=@profiles.nacos-namespace@
spring.cloud.nacos.config.group=@profiles.group@
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.extension-configs[0].data-id=${spring.application.name}.${spring.cloud.nacos.config.file-extension}
spring.cloud.nacos.config.extension-configs[0].group=@profiles.group@
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=@profiles.global.config@.${spring.cloud.nacos.config.file-extension}
spring.cloud.nacos.config.extension-configs[1].group=@profiles.group@
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.discovery.server-addr=@profiles.nacos-addr@
spring.cloud.nacos.discovery.namespace=@profiles.nacos-namespace@
spring.cloud.nacos.discovery.register-enabled=true
spring.cloud.nacos.discovery.group=@profiles.group@
spring.main.allow-bean-definition-overriding=true
cloud-server-gateway/src/main/resources/logback-spring.xml
New file
@@ -0,0 +1,227 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration  scan="true" scanPeriod="10 seconds">
    <contextName>logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
    <property name="log.path" value="/usr/local/server/logs"/>
    <!--0. 日志格式和颜色渲染 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!--1. 输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--2. 输出到文档-->
    <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${log.path}/${artifactId}/debug.log</file>
        <!--日志文档输出格式  Output format of the log document.-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档 -->
            <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${log.path}/${artifactId}/info.log</file>
        <!--日志文档输出格式  Output format of the log document.-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${log.path}/${artifactId}/warn.log</file>
        <!--日志文档输出格式  Output format of the log document.-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${log.path}/${artifactId}/error.log</file>
        <!--日志文档输出格式  Output format of the log document.-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.5 所有 除了DEBUG级别的其它高于DEBUG的 日志,记录到一个文件  -->
    <appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${log.path}/${artifactId}/all.log</file>
        <!--日志文档输出格式  Output format of the log document.-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/all-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档记录除了DEBUG级别的其它高于DEBUG的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>
    <!--
        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
        以及指定<appender>。<logger>仅有一个name属性,
        一个可选的level和一个可选的addtivity属性。
        name:用来指定受此logger约束的某一个包或者具体的某一个类。
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
              还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。
              如果未设置此属性,那么当前logger将会继承上级的级别。
        addtivity:是否向上级logger传递打印信息。默认是true。
        <logger name="org.springframework.web" level="info"/>
        <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
    -->
    <!--
        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
        不能设置为INHERITED或者同义词NULL。默认是DEBUG
        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
    -->
    <!-- 4  最终的策略:
                 基本策略(root级) + 根据profile在启动时, logger标签中定制化package日志级别(优先级高于上面的root级)-->
    <springProfile name="dev">
        <root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="ALL_FILE" />
        </root>
        <logger name="com.dsh" level="debug"/>
        <logger name="business-log" level="warn"/>
    </springProfile>
    <springProfile name="fat">
        <root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="ALL_FILE" />
        </root>
        <logger name="com.dsh.course.mapper" level="error"/>
        <logger name="business-log" level="warn"/>
    </springProfile>
    <springProfile name="prod">
        <root level="warn">
            <!-- 生产环境最好不配置console写文件 -->
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="ALL_FILE" />
        </root>
        <logger name="com.dsh.course.mapper" level="error"/>
        <logger name="business-log" level="warn"/>
    </springProfile>
</configuration>
cloud-server-gateway/src/main/resources/rebel.xml
New file
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
  This is the JRebel configuration file. It maps the running application to your IDE workspace, enabling JRebel reloading for this project.
  Refer to https://manuals.jrebel.com/jrebel/standalone/config.html for more information.
-->
<application generated-by="intellij" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://update.zeroturnaround.com/jrebel/rebel-2_1.xsd">
    <classpath>
        <dir name="/Users/dengyao/Documents/workSpace/java/MBCLOUD/Cloud/mb-cloud-parent/mb-cloud-services/mb-cloud-gateway/target/classes">
        </dir>
    </classpath>
</application>
cloud-server-gateway/src/main/resources/redis.properties
New file
@@ -0,0 +1,13 @@
spring.redis.database=0
# Redis·þÎñÆ÷µØÖ·
spring.redis.host=@redis.addr@
# Redis·þÎñÆ÷Á¬½Ó¶Ë¿Ú
spring.redis.port=@redis.port@
# Redis·þÎñÆ÷Á¬½ÓÃÜÂ루ĬÈÏΪ¿Õ£©
spring.redis.password=@redis.password@
spring.redis.jedis.pool.max-active=1024
spring.redis.jedis.pool.max-wait=10000
spring.redis.jedis.pool.max-idle=200
spring.redis.jedis.pool.min-idle=50
spring.redis.timeout=10000
spring.redis.block-when-exhausted=true
cloud-server-gateway/src/main/resources/script/buildZip.xml
New file
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" ?>
<assembly>
    <id>dist</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>src/main/resources/script</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>start_bash.sh</include>
            </includes>
            <fileMode>0777</fileMode>
            <lineEnding>unix</lineEnding>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}/</directory>
            <includes>
                <include>*.jar</include>
            </includes>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>
cloud-server-gateway/src/main/resources/script/start_bash.sh
New file
@@ -0,0 +1,88 @@
#!/bin/bash
APP_NAME=mb-cloud-gateway.jar
usage() {
    echo "Usage: sh ?D???.sh [start|stop|restart|status]"
    exit 1
}
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}
start(){
 is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    JAVA_CMD="nohup java -Xms128m -Xmn256m -Xmx512m -server -jar $APP_NAME >/dev/null 2>&1 &"
    eval $JAVA_CMD
  fi
}
debug(){
 is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    JAVA_CMD="java -Xms128m -Xmn256m -Xmx512m -server -jar $APP_NAME "
    eval $JAVA_CMD
  fi
}
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi
}
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}
restart(){
  stop
  start
}
case "$1" in
  "start")
    start
    ;;
  "debug")
    debug
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac
cloud-server-management/src/main/java/com/dsh/course/controller/AgreementController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/CancleOrderController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/CarController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/CarServiceController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/CityController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/DriverController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/HotAddressController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/ImgController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/NoticeController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/OpenCityController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/PhoneController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/ProblemController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/PushOrderController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/SensitiveWordsController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/ServerCarModelController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/SysIntegralController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/SysRedPacketRecordController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/SysUserController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/SystemNoticeController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/SystemPriceController.java
File was deleted
cloud-server-management/src/main/java/com/dsh/course/controller/VersionManagementController.java
File was deleted
cloud-server-other/pom.xml
New file
@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.mb.cloud</groupId>
        <artifactId>mb-cloud-parent</artifactId>
        <version>1.1.3</version>
        <relativePath>../cloud-server-parent/pom.xml</relativePath>
    </parent>
    <artifactId>mb-cloud-other</artifactId>
    <packaging>jar</packaging>
    <version>${parent.version}</version>
    <name>其他</name>
    <description>其他</description>
    <dependencies>
        <!--日志处理-->
        <dependency>
            <groupId>cn.mb.cloud</groupId>
            <artifactId>mb-cloud-common-log</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.mb.cloud</groupId>
            <artifactId>mb-cloud-common-data</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.mb.cloud</groupId>
            <artifactId>mb-cloud-common-api</artifactId>
        </dependency>
        <dependency>
          <groupId>cn.mb.cloud</groupId>
          <artifactId>mb-cloud-common-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.2</version>
        </dependency>
        <dependency>    <!--swagger2-->
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <exclusions>
                <exclusion>
                    <groupId>io.swagge</groupId>
                    <artifactId>swagger-annotations</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.swagge</groupId>
                    <artifactId>swagger-models</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.22</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.22</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>magic-beans-releases</id>
            <url>http://maven.magic-beans.cn/nexus/content/repositories/releases/</url>
        </repository>
        <repository>
            <id>aliyun</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
        <repository>
            <id>magic-beans-thirdparty</id>
            <url>http://maven.magic-beans.cn/nexus/content/repositories/thirdparty/</url>
        </repository>
    </repositories>
</project>
cloud-server-other/src/main/java/com/dsh/OtherApplication.java
New file
@@ -0,0 +1,43 @@
package com.dsh;
import cn.mb.cloud.common.core.annotation.MBCloudApplication;
import cn.mb.cloud.common.data.web.WebConfig;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import javax.annotation.PostConstruct;
import java.util.TimeZone;
/**
 * @author jason
 */
@EnableSwagger2
@EnableFeignClients
@MBCloudApplication
@Import({WebConfig.class})
@MapperScan("com.dsh.other.mapper")
public class OtherApplication {
    public static void main(String[] args) {
        SpringApplication.run(OtherApplication.class, args);
    }
    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
        PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer();
        c.setIgnoreUnresolvablePlaceholders(true);
        return c;
    }
    @PostConstruct
    void started() {
        TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
    }
}
cloud-server-other/src/main/java/com/dsh/config/JsonLongSerializer.java
New file
@@ -0,0 +1,20 @@
package com.dsh.config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
/**
 * @author 张鹏
 * @date 2020/9/2 11:12
 *
 * 重新封装实体时,ID 丢失精度,在重写的 ID 上添加注解  @JsonSerialize(using = JsonLongSerializer.class)
 */
public class JsonLongSerializer extends JsonSerializer<Long> {
    @Override
    public void serialize(Long aLong, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString(Long.toString(aLong));
    }
}
cloud-server-other/src/main/java/com/dsh/config/MessageLocalConfig.java
New file
@@ -0,0 +1,46 @@
package com.dsh.config;
import org.springframework.boot.autoconfigure.context.MessageSourceProperties;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import java.time.Duration;
/**
 * 国际化配置
 */
@Configuration
public class MessageLocalConfig {
    @Bean
    public MessageSource messageSource(MessageSourceProperties properties) {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        if (StringUtils.hasText(properties.getBasename())) {
            messageSource.setBasenames(StringUtils
                    .commaDelimitedListToStringArray(StringUtils.trimAllWhitespace(properties.getBasename())));
        }
        if (properties.getEncoding() != null) {
            messageSource.setDefaultEncoding(properties.getEncoding().name());
        }
        messageSource.setFallbackToSystemLocale(properties.isFallbackToSystemLocale());
        Duration cacheDuration = properties.getCacheDuration();
        if (cacheDuration != null) {
            messageSource.setCacheMillis(cacheDuration.toMillis());
        }
        messageSource.setAlwaysUseMessageFormat(properties.isAlwaysUseMessageFormat());
        messageSource.setUseCodeAsDefaultMessage(properties.isUseCodeAsDefaultMessage());
        return messageSource;
    }
    @Bean//注册国际化组件
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();
    }
}
cloud-server-other/src/main/java/com/dsh/config/MyLocaleResolver.java
New file
@@ -0,0 +1,80 @@
package com.dsh.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Locale;
public class MyLocaleResolver implements LocaleResolver {
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        //1=中文,2=英文,3=印尼文
        String language = getQueryParams(request, "language");
        Locale locale = null;
        if (StringUtils.isEmpty(language)) {
            locale = Locale.getDefault();
        }
        //如果请求不为空
        if (language.equals("1")) {
            locale = new Locale("zh", "CN");
        } else if (language.equals("2")) {
            locale = new Locale("en", "US");
        } else {
            locale = new Locale("in", "ID");
        }
        return locale;
    }
    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
    }
    public String getQueryParams(HttpServletRequest request, String key) {
        try {
            String method = request.getMethod();
            if("POST".equals(method)){
                String parameter = request.getParameter(key);
                if(!StringUtils.isEmpty(parameter)){
                    return parameter;
                }
                Object attribute = request.getAttribute(key);
                if(null != attribute){
                    return attribute.toString();
                }
                StringBuffer sb = new StringBuffer();
                ServletInputStream inputStream = request.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                String s;
                while ((s = bufferedReader.readLine()) != null){
                    sb.append(s);
                }
                bufferedReader.close();
                inputStream.close();
                JSONObject jsonObject = JSON.parseObject(sb.toString());
                return jsonObject.getString(key);
            }else{
                String parameter = request.getParameter(key);
                if(!StringUtils.isEmpty(parameter)){
                    return parameter;
                }
                Object attribute = request.getAttribute(key);
                if(null != attribute){
                    return attribute.toString();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
cloud-server-other/src/main/java/com/dsh/config/RedisConfig.java
New file
@@ -0,0 +1,56 @@
package com.dsh.config;
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 redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
@PropertySource("classpath:redis.properties")
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.timeout}")
    private int timeout;
    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.jedis.pool.min-idle}")
    private int minIdle;
    @Value("${spring.redis.jedis.pool.max-wait}")
    private long maxWaitMillis;
    @Value("${spring.redis.jedis.pool.max-active}")
    private int maxTotal;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.block-when-exhausted}")
    private boolean  blockWhenExhausted;
    @Bean
    public JedisPool redisPoolFactory()  throws Exception{
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMinIdle(minIdle);
        jedisPoolConfig.setMaxTotal(maxTotal);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
        // 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
        //When the connection is exhausted, if it is set to false, it will throw an exception. If set to true, it will block until timeout. By default, it is set to true.
        jedisPoolConfig.setBlockWhenExhausted(blockWhenExhausted);
        // 是否启用pool的jmx管理功能, 默认true
        //Enable JMX management for pool, default is set to true.
        jedisPoolConfig.setJmxEnabled(true);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
        return jedisPool;
    }
}
cloud-server-other/src/main/java/com/dsh/config/SwaggerConfig.java
New file
@@ -0,0 +1,58 @@
package com.dsh.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
/**
 * swagger配置类
 *
 * @author fengshuonan
 * @date 2017年6月1日19:42:59
 */
@Configuration
@EnableSwagger2
@ConditionalOnProperty(prefix = "guns", name = "swagger-open", havingValue = "true")
public class SwaggerConfig{
    @Bean
    public Docket systemApi() {
        List<Parameter> parameters = new ArrayList<>();
        // 添加header头
        ParameterBuilder type = new ParameterBuilder();
        type.name("Authorization").description("登录token").modelRef(new ModelRef("string"))
                .parameterType("header").required(true).build();
        parameters.add(type.build());
        return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.stylefeng.guns.rest.controller.api"))
                .paths(PathSelectors.any()).build().groupName("登录后API调用").globalOperationParameters(parameters).apiInfo(apiInfo("登录后API调用", "文档中可以查询及测试接口调用参数和结果", "1.0.0版本"));
    }
    @Bean
    public Docket commonApi() {
        return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.stylefeng.guns.rest.controller.common"))
                .paths(PathSelectors.any()).build().groupName("公共Aip接口")
                .apiInfo(apiInfo("公共Aip接口", "文档中可以查询及测试接口调用参数和结果", "1.0.0版本"));
    }
    private ApiInfo apiInfo(String name, String description, String version) {
        ApiInfo apiInfo = new ApiInfoBuilder().title(name).description(description).version(version).build();
        return apiInfo;
    }
}
cloud-server-other/src/main/java/com/dsh/other/advice/ControllerException.java
New file
@@ -0,0 +1,45 @@
package com.dsh.other.advice;
import cn.mb.cloud.common.core.constant.enums.ErrorCodeConstants;
import cn.mb.cloud.common.core.exception.BusinessException;
import cn.mb.cloud.common.core.util.ResponseData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestControllerAdvice
public class ControllerException {
    @ExceptionHandler(BusinessException.class)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public ResponseData bussiness(BusinessException e) {
        log.error("业务异常 message= " + e.getMessage() + " code= " + e.getErrorCode(), e);
        return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).
                msg(e.getMessage()).build();
    }
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public ResponseData runtimeException(RuntimeException e) {
        log.error("运行时异常信息" + e.getMessage(), e);
        return ResponseData.builder().code(ErrorCodeConstants.FAIL.getValue()).msg(e.getMessage()).build();
    }
    /**
     * 全局异常.
     *
     * @param e the e
     * @return R
     */
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public ResponseData exception(Exception e) {
        log.error("全局异常信息" + e.getMessage(), e);
        return ResponseData.fail();
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/DateTimeHelper.java
New file
@@ -0,0 +1,1769 @@
package com.dsh.other.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
/**
 * 日期时间类型的工具类,提供对日期和时间基于毫秒及以上精度的格式化方法、
 * 运算方法、比较方法等。注意:大部分对日期对象(java.util.Date)操作的方法,
 * 不会修改原日期对象,而以一个新的日期对象返回。
 * <p>
 * <p>
 * <p><pre><b>
 * 历史更新记录:</b>
 * 2004-6-17  创建此类型
 * 2005-9-30  修改方法:parseToDate(),去掉了对年份从(1970-9999)这个范围的限制。抛出异常:IllegalArgumentException(),JThinkRuntimeException()
 * 2005-10-2  修改方法: 其它方法,抛出异常:IllegalArgumentException(),JThinkRuntimeException()
 * 2005-10-2  增加方法: addTime(Date d, double times, int type)
 * 2005-10-2  增加方法: addSystemTime()
 * 2005-10-2  修改方法, 对于所有以日期对象类型java.util.Date为参数的方法,如果日期为null,都抛出异常:IllegalArgumentException()
 * <p>
 * </pre></p>
 */
public final class DateTimeHelper {
    /**
     * 把时间格式化成如:2002-08-03 8:26:30.400 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssSa_12 = "yyyy-MM-dd KK:mm:ss.S a";
    /**
     * 把时间格式化成如:2002-08-03 8:26:16 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssa_12 = "yyyy-MM-dd KK:mm:ss a";
    /**
     * 把时间格式化成如:2002-08-03 8:26 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmma_12 = "yyyy-MM-dd KK:mm a";
    /**
     * 把时间格式化成如:2002-08-03 8 am 格式的字符串
     */
    public final static String FMT_yyyyMMddHHa_12 = "yyyy-MM-dd KK a";
    /**
     * 把时间格式化成如:2002-07-05 am 格式的字符串
     */
    public final static String FMT_yyyyMMdda_12 = "yyyy-MM-dd a";
    /**
     * 把时间格式化成如:2002-08-03 08:26:30.400 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmssS = "yyyy-MM-dd HH:mm:ss.S";
    /**
     * 把时间格式化成如:2002-08-03 08:26:16 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";
    /**
     * 把时间格式化成如:2002-08-03 08:26 格式的字符串
     */
    public final static String FMT_yyyyMMddHHmm = "yyyy-MM-dd HH:mm";
    /**
     * 把时间格式化成如:2002-08-03 08 格式的字符串
     */
    public final static String FMT_yyyyMMddHH = "yyyy-MM-dd HH";
    /**
     * 把时间格式化成如:2002-07-05 格式的字符串
     */
    public final static String FMT_yyyyMMdd = "yyyy-MM-dd";
    /**
     * 把时间格式化成如:2002-07 格式的字符串
     */
    public final static String FMT_yyyyMM = "yyyy-MM";
    /**
     * 把时间格式化成如:07.19 格式的字符串
     */
    public final static String FMT_MMdd = "MM.dd";
    /**
     * 把时间格式化成如:12:08 PM(下午) 格式的字符串
     */
    public final static String FMT_HHmmA_12 = "KK:mm a";
    /**
     * 把时间格式化成如:0:55 AM上午, CST 格式的字符串
     */
    public final static String FMT_HHmmAz_12 = "KK:mm a,z";
    /**
     * 把时间格式化成如:0:56 AM上午, 中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmAzzzz_12 = "KK:mm a,zzzz";
    /**
     * 把时间格式化成如:12:08:23 am 格式的字符串
     */
    public final static String FMT_HHmmssA_12 = "KK:mm:ss a";
    /**
     * 把时间格式化成如:0:55:33 AM上午, CST 格式的字符串
     */
    public final static String FMT_HHmmssAz_12 = "KK:mm:ss a,z";
    /**
     * 把时间格式化成如:0:56:23 AM上午, 中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmssAzzzz_12 = "KK:mm:ss a,zzzz";
    /**
     * 把时间格式化成如:22:04:45 格式的字符串
     */
    public final static String FMT_HHmmss = "HH:mm:ss";
    /**
     * 把时间格式化成如:22:04:45.824 格式的字符串
     */
    public final static String FMT_HHmmssS = "HH:mm:ss.S";
    /**
     * 把时间格式化成如:22:04 格式的字符串
     */
    public final static String FMT_HHmm = "HH:mm";
    /**
     * 把时间格式化成如:22:04,CST 格式的字符串
     */
    public final static String FMT_HHmmz = "HH:mm,z";
    /**
     * 把时间格式化成如:22:04,中国标准时间 格式的字符串
     */
    public final static String FMT_HHmmzzzz = "HH:mm,zzzz";
    /**
     * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串
     */
    public final static String FMT_WWMMDDYY_EN = "EEE,MMM d,''yyyy";
    /**
     * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串
     */
    public final static String FMT_WWMMDDYY_CN = "EEE,yyyy年MMMd号";
    /**
     * 把时间格式化成如:Sun,Nov 14,'2004 格式的字符串
     */
    public final static String FMT_MMDDYY_EN = "MMM d,''yyyy";
    /**
     * 把时间格式化成如:星期日,2004年十一月14号 格式的字符串
     */
    public final static String FMT_MMDDYY_CN = "yyyy年MMMd号";
    /**
     * 把时间格式化成如:星期几 格式的字符串,即可获得该日这个时间是星期几
     */
    public final static String FMT_WW = "EEE";
    public final static String FMT_ddMMyyyy = "dd-MM-yyyy";
    /**
     * 把时间格式成日期数字,如:20120606
     */
    public final static String FMT_yyyyMMdd_noseparator = "yyyyMMdd";
    public final static String FMT_yyyyMMdd_Zh = "yyyy年MM月dd日";
    public final static String FMT_yyyyMMddHH_noseparator = "yyyyMMddHH";
    /**
     * 把时间格式成日期数字,如:20120606121212
     */
    public final static String FMT_yyyyMMddhhmmss_noseparator = "yyyyMMddHHmmss";
    /**
     * 把时间格式化成如:2002.07.05 格式的字符串
     */
    public final static String FMT_yyyyxMMxdd = "yyyy.MM.dd";
    /**
     * 常用的格式化时间的格式组,用于本类中格式化字符串成时间型
     */
    private final static String[] formatStr = {
            FMT_ddMMyyyy,
            FMT_yyyyMMddHHmmssS,
            FMT_yyyyMMddHHmmss,
            FMT_yyyyMMddHHmm,
            FMT_yyyyMMddHH,
            FMT_yyyyMMdd,
            FMT_HHmmss,
            FMT_HHmmssS,
            FMT_HHmm,
            FMT_HHmmz,
            FMT_HHmmzzzz,
            FMT_yyyyMMddHHmmssSa_12,
            FMT_yyyyMMddHHmmssa_12,
            FMT_yyyyMMddHHmma_12,
            FMT_yyyyMMddHHa_12,
            FMT_yyyyMMdda_12,
            FMT_HHmmA_12,
            FMT_HHmmAz_12,
            FMT_HHmmAzzzz_12,
            FMT_HHmmssA_12,
            FMT_HHmmssAz_12,
            FMT_HHmmssAzzzz_12
    };
    /**
     * 私有化构造器,使得不能产生该类对象,类中所有的方法均为静态方法
     */
    private DateTimeHelper() {
    }
    /**
     * 根据给出的Date值和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param date
     * @param formatStr
     * @return 如果为null,返回字符串""
     */
    public static String formatDateTimetoString(Date date, String formatStr) {
        String reStr = "";
        if (date == null || formatStr == null || formatStr.trim().length() < 1) {
            return reStr;
        }
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern(formatStr);
        reStr = sdf.format(date);
        return reStr;
    }
    public static Date getSystemDate(String fmtstr) {
        try {
            return parseToDate(formatDateTimetoString(getSystemDate(), fmtstr));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return getSystemDate();
        }
    }
    /**
     * 根据给出的Date值和格式串采用给定的国家所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param date      日期对象
     * @param formatStr 日期格式
     * @return 如果为null,返回字符串""
     */
    public static String formatDateTimetoString(Date date, String formatStr, Locale locale) {
        String reStr = "";
        if (date == null || formatStr == null || locale == null || formatStr.trim().length() < 1) {
            return reStr;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale);
        reStr = sdf.format(date);
        return reStr;
    }
    /**
     * 根据给出的Date值字符串和格式串采用操作系统的默认所在的国家风格来格式化时间,并返回相应的字符串
     *
     * @param dateStr   日期串
     * @param formatStr 日期格式
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateStr, String formatStr) throws Exception {
        String dStr = "";
        if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0) {
            dStr = formatDateTimetoString(parseToDate(dateStr), formatStr);
        }
        return dStr;
    }
    /**
     * 根据给出的Date值字符串和格式串采用指定国家的风格来格式化时间,并返回相应的字符串
     *
     * @param dateStr   日期串
     * @param formatStr 日期格式
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateStr, String formatStr, Locale locale) throws Exception {
        String dStr = "";
        if (dateStr != null && dateStr.trim().length() > 0 && formatStr != null && formatStr.trim().length() > 0 && locale != null) {
            dStr = formatDateTimetoString(parseToDate(dateStr, locale), formatStr, locale);
        }
        return dStr;
    }
    /**
     * 按指定的格式和操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @param formatStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, String formatStr) throws Exception {
        if (dateTimeStr == null || formatStr == null || dateTimeStr.trim().length() < 1 || formatStr.trim().length() < 1) {
            throw new IllegalArgumentException("参数dateTimeStr、formatStr不能是null或空格串!");
        }
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
        try {
            return sdf.parse(dateTimeStr);
        } catch (ParseException e) {
            throw new Exception(e);
        }
    }
    /**
     * 按指定的格式和指定国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @param formatStr
     * @param locale
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, String formatStr, Locale locale) throws Exception {
        if (dateTimeStr != null && formatStr != null && locale != null && dateTimeStr.trim().length() > 0 && formatStr.trim().length() > 0) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr, locale);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
                throw new Exception(e);
            }
        } else {
            throw new IllegalArgumentException("参数dateTimeStr、formatStr、locale不能是null或空格串!");
        }
    }
    /**
     * 按操作系统默认国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr) throws Exception {
        if (dateTimeStr == null || dateTimeStr.trim().length() < 1) {
            throw new IllegalArgumentException("参数dateTimeSt不能是null或空格串!");
        }
        int formatStrLength = formatStr.length;
        int i = 0;
        for (i = 0; i < formatStrLength; i++) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i]);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
            }
        }
        throw new Exception("日期格式不正确!");
    }
    /**
     * 根据给出的年月和日返回一个日期型的对象
     *
     * @param year  年
     * @param month 月 ,1到12
     * @param day   日 ,1到31
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(int year, int month, int day) throws Exception {
        if (month < 1 || month > 12 || day < 1 || day > 31) {
            throw new IllegalArgumentException("参数不正确!");
        }
        String yearStr = String.valueOf(year);
        String monthStr = String.valueOf(month);
        String dayStr = String.valueOf(day);
        return parseToDate(yearStr + "-" + monthStr + "-" + dayStr);
    }
    /**
     * 根据给出的年月日、时分秒、返回一个对应的Date型对象
     *
     * @param year  年
     * @param month 月 ,1到12
     * @param day   日 ,1到31
     * @param h     小时,从0到23
     * @param m     分,从0到60
     * @param s     秒,从0到60
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(int year, int month, int day, int h, int m, int s) throws Exception {
        if (month < 1 || month > 12 || day < 1 || day > 31 || h < 0 || h > 23 || m < 0 || m > 60 || s < 0 || s > 60) {
            throw new IllegalArgumentException("参数不正确!");
        }
        String yearStr = String.valueOf(year);
        String monthStr = String.valueOf(month);
        String dayStr = String.valueOf(day);
        String hStr = String.valueOf(h);
        String mStr = String.valueOf(m);
        String sStr = String.valueOf(s);
        return parseToDate(yearStr + "-" + monthStr + "-" + dayStr + " " + hStr + ":" + mStr + ":" + sStr);
    }
    /**
     * 按指定国家的风格把给定的日期字符串格式化为一个Date型日期
     *
     * @param dateTimeStr
     * @return java.util.Date类型对象
     * @throws Exception
     */
    public static Date parseToDate(String dateTimeStr, Locale locale) throws Exception {
        if (dateTimeStr == null || dateTimeStr.trim().length() < 1 || locale == null) {
            throw new IllegalArgumentException("参数dateTimeSt、locale不能是null或空格串!");
        }
        int formatStrLength = formatStr.length;
        int i = 0;
        for (i = 0; i < formatStrLength; i++) {
            SimpleDateFormat sdf = new SimpleDateFormat(formatStr[i], locale);
            try {
                return sdf.parse(dateTimeStr);
            } catch (ParseException e) {
            }
        }
        throw new Exception("日期格式不正确!");
    }
    /**
     * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateTimeStr) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss);
    }
    /**
     * 将给定的日期时间字符串按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDateTimetoString(String dateTimeStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_yyyyMMddHHmmss, locale);
    }
    /**
     * 将给定的日期时间按操作系统默认的国家内格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTime
     * @return 如果为null,返回""
     */
    public static String formatDateTimetoString(Date dateTime) {
        return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss);
    }
    /**
     * 将给定的日期时间按指定国家的风格格式化成"yyyy-MM-dd HH:mm:ss"格式的日期时间串;
     *
     * @param dateTime
     * @param locale
     * @return 如果为null,返回""
     */
    public static String formatDateTimetoString(Date dateTime, Locale locale) {
        return formatDateTimetoString(dateTime, FMT_yyyyMMddHHmmss, locale);
    }
    /**
     * 将给定的日期字符串按操作系统默认的国家风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param date
     * @param dateStr 日期串
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDatetoString(Date date, String dateStr) throws Exception {
        return formatDateTimetoString(dateStr, FMT_yyyyMMdd);
    }
    /**
     * 将给定的日期字符串按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param dateStr 日期串
     * @param locale  Locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatDatetoString(String dateStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateStr, FMT_yyyyMMdd, locale);
    }
    /**
     * 将给定的日期按指定操作系统默认国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param d 日期对象
     * @return 如果为null,返回""
     */
    public static String formatDatetoString(Date d) {
        return formatDateTimetoString(d, FMT_yyyyMMdd);
    }
    /**
     * 将给定的日期按指定国家的风格格式化成"yyyy-MM-dd"格式的日期串;
     *
     * @param d      日期对象
     * @param locale Locale
     * @return 如果为null,返回""
     */
    public static String formatDatetoString(Date d, Locale locale) {
        return formatDateTimetoString(d, FMT_yyyyMMdd, locale);
    }
    /**
     * 将给定的日期时间字符串按操作系统默认的国家风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatTimetoString(String dateTimeStr) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss);
    }
    /**
     * 将给定的日期时间字符串按指定国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     * @throws Exception
     */
    public static String formatTimetoString(String dateTimeStr, Locale locale) throws Exception {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale);
    }
    /**
     * 将给定的日期时间按指定操作系统默认国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @return 如果为null,返回""
     */
    public static String formatTimetoString(Date dateTimeStr) {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss);
    }
    /**
     * 将给定的日期时间按指定国家的风格格式化成"HH:mm:ss"格式的时间串;
     *
     * @param dateTimeStr
     * @param locale
     * @return 如果为null,返回""
     */
    public static String formatTimetoString(Date dateTimeStr, Locale locale) {
        return formatDateTimetoString(dateTimeStr, FMT_HHmmss, locale);
    }
    /**
     * 返回一个时间的年份整数
     *
     * @param d
     * @return 年份
     */
    public static int getYearOfDate(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.YEAR);
    }
    /**
     * 返回一个时间的月份整数
     *
     * @param d
     * @return 月份
     */
    public static int getMonthOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.MONTH) + 1;
    }
    /**
     * 返回一个时间的天份整数,是这个月的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfMonth(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }
    /**
     * 返回一个时间的天份整数,是这个年份的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_YEAR);
    }
    /**
     * 返回一个时间的天份整数,是这个周的第几天
     *
     * @param d
     * @return 天份
     */
    public static int getDayOfWeek(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DAY_OF_WEEK) - 1;
    }
    /**
     * 返回一个时间的周的整数,是这个月的第几周
     *
     * @param d
     * @return 周
     */
    public static int getWeekOfMonth(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.WEEK_OF_MONTH);
    }
    /**
     * 返回一个时间的周的整数,是这个年份的第几周
     *
     * @param d
     * @return 周
     */
    public static int getWeekOfYear(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.WEEK_OF_YEAR);
    }
    /**
     * 返回该时间所对应的在一天中的小时数的整数,如当前(Date now)是下午3点,返回为15
     *
     * @param d
     * @return 小时
     */
    public static int getHoursOfDay(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int hours = calendar.get(Calendar.HOUR_OF_DAY);
        return hours;
    }
    /**
     * 返回该时间所对应的在一天中的小时数的整数(采用12小时制),如当前(Date now)是下午3点,返回为3
     *
     * @param d
     * @return 小时
     */
    public static int getHoursOfDay12(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int hours = calendar.get(Calendar.HOUR);
        return hours;
    }
    /**
     * 返回该时间所对应的分钟数中的整数,如now是15点14分,则返回14
     *
     * @param d
     * @return 分钟
     */
    public static int getMinutesOfHour(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int minutes = calendar.get(Calendar.MINUTE);
        return minutes;
    }
    /**
     * 返回该时间所对应的秒数中的整数,如now是15点14分34秒,则返回34
     *
     * @param d
     * @return 秒
     */
    public static int getSecondsOfMinute(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int seconds = calendar.get(Calendar.SECOND);
        return seconds;
    }
    /**
     * 返回该时间所对应的毫秒数中的整数,如now是15点14分34秒470毫秒,则返回470
     *
     * @param d
     * @return 毫秒
     */
    public static int getMillisecondsOfSecond(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        int millisecond = calendar.get(Calendar.MILLISECOND);
        return millisecond;
    }
    /**
     * 返回该时间相对于1970年1月1日开始计算的对应的毫秒数
     *
     * @param d
     * @return 毫秒数
     */
    public static long getTime(Date d) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        return d.getTime();
    }
    /**
     * 比较两个时间的先后顺序。
     * 如果时间d1在d2之前,返回1,
     * 如果时间d1在d2之后,返回-1,
     * 如果二者相等,返回0
     *
     * @param d1
     * @param d2
     * @return 如果时间d1在d2之前,返回1,
     * 如果时间d1在d2之后,返回-1,
     * 如果二者相等,返回0
     */
    public static int compareTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long dI1 = d1.getTime();
        long dI2 = d2.getTime();
        if (dI1 > dI2) {
            return -1;
        } else if (dI1 < dI2) {
            return 1;
        } else {
            return 0;
        }
    }
    /**
     * 返回两个日期之间的毫秒数的差距
     *
     * @param d1
     * @param d2
     * @return 二者至1970年1.1后的毫秒数的差值
     */
    public static long getMillisecondsOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long dI1 = d1.getTime();
        long dI2 = d2.getTime();
        return (dI1 - dI2);
    }
    /**
     * 获得两个日期之间相差的秒数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的秒数
     */
    public static double getSecondsOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long i = getMillisecondsOfTwoDate(d1, d2);
        return (double) i / 1000;
    }
    /**
     * 获得两个日期之间相差的分钟数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的分钟数
     */
    public static double getMinutesOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的小时数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的小时数
     */
    public static double getHoursOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 60 / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的天数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的天数
     */
    public static double getDaysOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return (double) millions / 24 / 60 / 60 / 1000;
    }
    /**
     * 获得两个日期之间相差的天数
     *
     * @param d1
     * @param d2
     * @return 两日期之间相差的天数
     */
    public static Long daysOfTwoDate(Date d1, Date d2) {
        if (d1 == null || d2 == null) {
            throw new IllegalArgumentException("参数d1或d2不能是null对象!");
        }
        long millions = getMillisecondsOfTwoDate(d1, d2);
        return millions / 24 / 60 / 60 / 1000;
    }
    /**
     * 把给定的时间加上指定的时间值,可以为负。
     *
     * @param d     日期对象
     * @param times 时间值
     * @param type  类型,
     *              Calendar.MILLISECOND,毫秒<BR>
     *              Calendar.SECOND,秒<BR>
     *              Calendar.MINUTE,分钟<BR>
     *              Calendar.HOUR,小时<BR>
     *              Calendar.DATE,日<BR>
     * @return 如果d为null,返回null
     */
    public static Date addTime(Date d, double times, int type) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        long qv = 1;
        switch (type) {
            case Calendar.MILLISECOND:
                qv = 1;
                break;
            case Calendar.SECOND:
                qv = 1000;
                break;
            case Calendar.MINUTE:
                qv = 1000 * 60;
                break;
            case Calendar.HOUR:
                qv = 1000 * 60 * 60;
                break;
            case Calendar.DATE:
                qv = 1000 * 60 * 60 * 24;
                break;
            default:
                throw new RuntimeException("时间类型不正确!type=" + type);
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        long milliseconds = (long) Math.round(Math.abs(times) * qv);
        if (times > 0) {
            for (; milliseconds > 0; milliseconds -= 2147483647) {
                if (milliseconds > 2147483647) {
                    calendar.add(Calendar.MILLISECOND, 2147483647);
                } else {
                    calendar.add(Calendar.MILLISECOND, (int) milliseconds);
                }
            }
        } else {
            for (; milliseconds > 0; milliseconds -= 2147483647) {
                if (milliseconds > 2147483647) {
                    calendar.add(Calendar.MILLISECOND, -2147483647);
                } else {
                    calendar.add(Calendar.MILLISECOND, -(int) milliseconds);
                }
            }
        }
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的年份,可以为负, 返回新的被加上了年份的日期对象,不影响参数日期对象值
     * Given a certain time and a specified year, which can be negative, returns a new date object with the added year, without affecting the value of the original date object.
     * @param d
     * @param years
     * @return 日期对象
     */
    public static Date addYears(Date d, int years) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.YEAR, years);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的月份,可以为负
     * Adding the specified number of month to the given time is possible, including negative values.
     * @param d
     * @param months
     * @return 日期对象
     */
    public static Date addMonths(Date d, int months) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MONTH, months);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的天数,可以为负
     * Adding the specified number of day to the given time is possible, including negative values.
     * @param d    日期对象
     * @param days
     * @return 日期对象
     */
    public static Date addDays(Date d, int days) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.HOUR, days * 24);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的小时,可以为负
     * Adding the specified number of hour to the given time is possible, including negative values.
     * @param d     日期对象
     * @param hours
     * @return 日期对象
     */
    public static Date addHours(Date d, int hours) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.HOUR, hours);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的分钟,可以为负
     * Adding the specified number of minute to the given time is possible, including negative values.
     * @param d
     * @param minutes
     * @return 日期对象
     */
    public static Date addMinutes(Date d, int minutes) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MINUTE, minutes);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的秒数,可以为负
     * Adding the specified number of seconds to the given time is possible, including negative values.
     * @param d
     * @param seconds
     * @return 日期对象
     */
    public static Date addSeconds(Date d, int seconds) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.SECOND, seconds);
        return calendar.getTime();
    }
    /**
     * 把给定的时间加上指定的毫秒数,可以为负
     * Adding the specified number of milliseconds to the given time can result in a negative value.
     * @param d
     * @param milliseconds
     * @return 日期对象
     */
    public static Date addMilliseconds(Date d, int milliseconds) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.add(Calendar.MILLISECOND, milliseconds);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的年份是新的给定的年份
     * Setting the year of a date object to a new given year.
     * @param d    需要设定的日期对象
     * @param year 新的年份
     * @return 日期对象
     */
    public static Date setYearOfDate(Date d, int year) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.YEAR, year);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的月份是新的给定的月份
     * Set the month of a date object to a new given month.
     * @param d     需要设定的日期对象
     * @param month 新的月份
     * @return 新日期对象
     */
    public static Date setMonthOfDate(Date d, int month) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MONTH, month);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的天是新的给定的天
     * Set the day of a date object to a new given day.
     * @param d   需要设定的日期对象
     * @param day 新的天
     * @return 新日期对象
     */
    public static Date setDayOfDate(Date d, int day) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.DAY_OF_MONTH, day);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的小时是新的给定的小时
     * Setting the hour of a date object to a new given hour.
     * @param d    需要设定的日期对象
     * @param hour 新的小时数
     * @return 新日期对象
     */
    public static Date setHourOfDate(Date d, int hour) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的分钟是新的给定的分钟数
     * Set the minutes of a date object to a new given minute value.
     * @param d      需要设定的日期对象
     * @param minute 新的分钟数
     * @return 新日期对象
     */
    public static Date setMinuteOfDate(Date d, int minute) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MINUTE, minute);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的秒数是新的给定的分钟数
     * Setting the seconds of a date object to the new given minute value.
     *
     * @param d      需要设定的日期对象
     * @param second 新的秒数
     * @return 新日期对象
     */
    public static Date setSecondOfDate(Date d, int second) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.SECOND, second);
        return calendar.getTime();
    }
    /**
     * 设置一个日期对象的毫秒数是新的给定的分钟数
     * Setting the milliseconds of a date object to a new given minute value.
     * @param d           需要设定的日期对象
     * @param millisecond 新的毫秒数
     * @return 新日期对象
     */
    public static Date setMillisecondOfDate(Date d, int millisecond) {
        if (d == null) {
            throw new IllegalArgumentException("参数d不能是null对象!");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        calendar.set(Calendar.MILLISECOND, millisecond);
        return calendar.getTime();
    }
    /**
     * 返回指定日期的月份的天数量
     * Retrieve the number of days in the month of the specified date.
     * @param d 日期对象
     */
    public static int getDaysOfMonth(Date d) {
        int year = getYearOfDate(d);
        int month = getMonthOfYear(d);
        return getDaysOfMonth(year, month);
    }
    /**
     * 返回指定日期的月份的天数量
     * Retrieve the number of days in the month of the specified date.
     * @param year  年
     * @param month 月
     */
    public static int getDaysOfMonth(int year, int month) {
        int days = 0;
        if (month == 2) {
            if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
                days = 29;
            } else {
                days = 28;
            }
        }
        if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
            days = 30;
        }
        if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) {
            days = 31;
        }
        return days;
    }
    /**
     * 返回系统时间,以日期对象形式返回
     *
     * @return 日期对象
     */
    public static Date getSystemDate() {
        return new Date(System.currentTimeMillis());
    }
    /**
     * 返回系统时间,以毫秒形式返回
     *
     * @return 毫秒数
     */
    public static long getSystemTime() {
        return System.currentTimeMillis();
    }
    /**
     * 返回24小时前的时间
     *
     * @param date
     * @return
     */
    public static Date getLastDay(Date date) {
        long day = date.getTime();
        long lastDay = day - 24 * 60 * 60 * 1000;
        return new Date(lastDay);
    }
    /**
     * 返回24小时后的时间
     *
     * @param date
     * @return
     */
    public static Date getTomorrow(Date date) {
        long day = date.getTime();
        long tomorrow = day + 24 * 60 * 60 * 1000;
        return new Date(tomorrow);
    }
    /**
     * 取得30天前的这个时间
     *
     * @return
     */
    public static Date getDayLastMonth() {
        long day = new Date().getTime();
        long dayLastMonth = day - 24 * 60 * 60 * 1000 * 20;
        return new Date(dayLastMonth);
    }
    /**
     * 取得30天后的这个时间
     *
     * @return
     */
    public static Date getDayNextMonth() {
        long day = new Date().getTime();
        long dayNextMonth = day + 20 * 24 * 60 * 60 * 1000;
        return new Date(dayNextMonth);
    }
    public static int getMonthCount(Date sDate, Date eDate) {
        String sDateStr = DateTimeHelper.formatDateTimetoString(sDate, "MM");
        String eDateStr = DateTimeHelper.formatDateTimetoString(eDate, "MM");
        int monthCount = Integer.parseInt(eDateStr) - Integer.parseInt(sDateStr) + 1;
        return monthCount;
    }
    /**
     * 取得下个月的这天,比如2月1日可取得3月1日,此方法有很大局限性,不能用于月末的天数
     * Obtain the same day of the following month, for example, February 1st can obtain March 1st. This method has significant limitations and cannot be used for the last days of the month.
     * @param date
     * @return
     */
    public static Date getDayNextMonth(Date date) {
        String yearStr = DateTimeHelper.formatDateTimetoString(date, "yyyy");
        String monthStr = DateTimeHelper.formatDateTimetoString(date, "MM");
        String dayStr = DateTimeHelper.formatDateTimetoString(date, "dd");
        int year = Integer.parseInt(yearStr);
        int month = Integer.parseInt(monthStr);
        if (month == 12) {
            month = 1;
            year = year + 1;
            yearStr = String.valueOf(year);
            monthStr = String.valueOf(month);
        }
        String dateStr = yearStr + "-" + monthStr + "-" + dayStr;
        try {
            date = DateTimeHelper.parseToDate(dateStr);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 获取当月开始时0点0分0秒
     *
     * @return
     */
    public static Date getCurrentMouthStart() {
        Date d = getSystemDate();
        d = setDayOfDate(d, 1);
        d = setHourOfDate(d, 0);
        d = setMinuteOfDate(d, 0);
        d = setSecondOfDate(d, 0);
        return d;
    }
    /**
     * 返回下月的这天
     *
     * @param date
     * @return
     */
    public static Date getDateNextMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, +1);
        return cal.getTime();
    }
    /**
     * 根据时间获取和当前时间的差距.
     * Obtain the difference between the current time and the time in question.
     * @param date - 待比较实际
     * @return 时间差距字符串
     */
    public static String getPassdTime(Date date) {
        if (null == date) {
            return null;
        }
        String ret = null;
        // 计算和当前相差秒数
        // Calculate the difference in seconds from the current time.
        long currentTimeMillis = System.currentTimeMillis();
        long timeDiff = (currentTimeMillis - date.getTime());
        int seconds = (int) (timeDiff / 1000);
        int minutes = seconds / 60;
        int hours = minutes / 60;
        int days = hours / 24;
        int months = days / 30;
        if (days <= 7) {
            if (days != 0) {
                ret = days + "天前";
            } else if (hours != 0) {
                ret = hours + "小时前";
            } else if (minutes != 0) {
                ret = minutes + "分钟前";
            } else {
                ret = "刚刚";
            }
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss");
            ret = sdf.format(date);
        }
        return ret;
    }
    /**
     * 获取当前日期后几天的日期
     * Obtaining the date of the day after several days from the current date.
     * @param day 天数
     * @return
     */
    public static Date getCurrentNextDays(int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, day);
        Date date = calendar.getTime();
        return date;
    }
    public static String getCurrentStringDate() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = simpleDateFormat.format(new Date());
        return dateString;
    }
    /**
     * 获取当前日期是星期几<br>
     * Obtain the day of the week for the current date.
     * @param dt
     * @return 当前日期是星期几
     */
    public static String getWeekOfDate(Date dt) {
        String[] weekDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0) {
            w = 0;
        }
        return weekDays[w];
    }
    /**
     * 获取今天时间 2017-11-20 00:00:00
     */
    public static Date todayDate() {
        try {
            String date = formatDatetoString(new Date());
            String todayString = date + " 00:00:00";
            return parseToDate(todayString, FMT_yyyyMMdd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Date();
    }
    /**
     * 获取指定日期的 时间 2017-11-20 00:00:00
     *
     * @param date
     * @return
     */
    public static Date createDate(Date date) {
        try {
            String dates = formatDatetoString(date);
            String todayString = dates + " 00:00:00";
            return parseToDate(todayString, FMT_yyyyMMdd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Date();
    }
    public static String createDateTime(Date date) {
        try {
            String dates = formatDatetoString(date);
            String time = DateTimeHelper.formatDateTimetoString(new Date(), FMT_HHmmss);
            String todayString = dates + " " + time;
            return todayString;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    /**
     * @param time
     * @return
     */
    public static String getTimeHint(Date time) {
        String hint = "";
        double minutes = DateTimeHelper.getMinutesOfTwoDate(new Date(), time);
        double hours = DateTimeHelper.getHoursOfTwoDate(new Date(), time);
        double days = DateTimeHelper.getDaysOfTwoDate(new Date(), time);
        if (minutes < 1) {
            hint = "刚刚";
        } else if (hours < 1) {
            hint = new Double(minutes).intValue() + "分钟前";
        } else if (days < 1) {
            hint = new Double(hours).intValue() + "小时前";
        } else if (days < 7) {
            hint = new Double(days).intValue() + "天前";
        } else {
            hint = DateTimeHelper.formatDateTimetoString(time, DateTimeHelper.FMT_yyyyMMdd);
        }
        return hint;
    }
    /**
     * 根据时间获取和当前时间的差距.
     * Obtain the difference between the current time and the time in question.
     * @param date - 待比较实际
     * @return 时间差距字符串
     */
    public static String getLoginTime(Date date) {
        if (null == date) {
            return null;
        }
        String ret = null;
        // 计算和当前相差秒数
        //Calculate the difference in seconds from the current time.
        long currentTimeMillis = System.currentTimeMillis();
        long timeDiff = (currentTimeMillis - date.getTime());
        int seconds = (int) (timeDiff / 1000);
        int minutes = seconds / 60;
        int hours = minutes / 60;
        int days = hours / 24;
        int months = days / 30;
        if (months != 0) {
            ret = "1个月前";
        } else if (days != 0) {
            ret = days + "天前";
        } else if (hours != 0) {
            ret = hours + "小时前";
        } else if (minutes != 0) {
            ret = minutes + "分钟前";
        } else {
            ret = "刚刚";
        }
        return ret;
    }
    public static Date getWXTime() {
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        Date date = calendar.getTime();
        return date;
    }
    /**
     * 是否是同一天
     * it the same day
     * @param first
     * @param second
     * @return
     */
    public static Boolean isSameDay(Date first, Date second) {
        if (first == null || second == null) {
            return false;
        }
        int day1 = getDayOfYear(first);
        int day2 = getDayOfYear(second);
        if (day1 != day2) {
            return false;
        }
        return true;
    }
    /**
     * 是否超过指定时刻
     * Has the specified time limit been exceeded
     * @param day  时间
     * @param time 指定时刻
     * @return
     */
    public static Boolean expireDayTime(Date day, Integer time) {
        if (null == day) {
            return false;
        }
        try {
            String dates = formatDatetoString(day);
            String timeHour = "";
            for (int i = 0; i <= 23; i++) {
                if (i == time) {
                    if (i < 10) {
                        timeHour += " 0" + time + ":00:00";
                    } else if (i < 23) {
                        timeHour += " " + time + ":00:00";
                    } else {
                        timeHour += " 00" + time + ":00:00";
                    }
                }
            }
            String todayString = dates + timeHour;
            Date esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss);
            if (DateTimeHelper.compareTwoDate(day, esDayTime) != 1) {
                int i = compareTwoDate(day, esDayTime);
                System.out.println(i);
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return false;
    }
    /**
     * 指定一天哪一个小时
     * Specify which hour of a particular day.
     * @param time
     * @return
     */
    public static Date createDayTime(Integer time) {
        String dates = formatDatetoString(new Date());
        String timeHour = "";
        for (int i = 0; i <= 23; i++) {
            if (i == time) {
                if (i < 10) {
                    timeHour += " 0" + time + ":00:00";
                } else if (i < 23) {
                    timeHour += " " + time + ":00:00";
                } else {
                    timeHour += " 00" + time + ":00:00";
                }
            }
        }
        String todayString = dates + timeHour;
        Date esDayTime = new Date();
        try {
            esDayTime = parseToDate(todayString, FMT_yyyyMMddHHmmss);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return esDayTime;
    }
    /**
     * 数字换算成中文(周)
     * Conversion of numbers to Chinese (weeks)
     * @param time
     * @return
     */
    public static String getWeekString(Integer time) {
        if (time == 1) {
            return "一";
        } else if (time == 2) {
            return "二";
        } else if (time == 3) {
            return "三";
        } else if (time == 4) {
            return "四";
        } else if (time == 5) {
            return "五";
        } else if (time == 6) {
            return "六";
        } else if (time == 0 || time == 7) {
            return "日";
        }
        return null;
    }
    /**
     * LocalDateTime -> Date
     *
     * @param localDateTime
     * @return
     */
    public static Date asDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }
    /**
     * Date -> LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDateTime asLocalDateTime(Date date) {
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
    }
    /**
     * 获取两个时间的间隔(秒)
     * Obtain the time difference between two instances (in seconds).
     * @param d1
     * @param d2
     * @return
     */
    public static long getDateBetween(Date d1, Date d2) {
        return Math.abs((d1.getTime() - d2.getTime()) / 1000);//取绝对值
    }
    /**
     * @param date
     * @return 获取今天最后的时间
     * Obtain the final time of today.
     */
    public static Date getEndDate(Date date) {
        if (date == null) {
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        return c.getTime();
    }
    /**
     * 日期天数差
     * Days Difference
     */
    public static int daysBetween(Date today, Date endDate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        today = sdf.parse(sdf.format(today));
        endDate = sdf.parse(sdf.format(endDate));
        Calendar cal = Calendar.getInstance();
        cal.setTime(today);
        long time1 = cal.getTimeInMillis();
        cal.setTime(endDate);
        long time2 = cal.getTimeInMillis();
        long between_days = (time2 - time1) / (1000 * 3600 * 24);
        return Integer.parseInt(String.valueOf(between_days));
    }
    /**
     * 获取到当月所有日期
     * Obtain all dates of the current month
     * @param date
     * @return
     */
    public static List<Date> getAllTheDateOftheMonth(Date date) {
        List<Date> list = new ArrayList<Date>();
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DATE, 1);
        int month = cal.get(Calendar.MONTH);
        while (cal.get(Calendar.MONTH) == month) {
            list.add(cal.getTime());
            cal.add(Calendar.DATE, 1);
        }
        return list;
    }
    /*public static void main(String[] args) throws ParseException {
        List<Date> allTheDateOftheMonth = getAllTheDateOftheMonth(new Date());
        Date date = allTheDateOftheMonth.get(11);
        System.out.println(date.toLocaleString());
        int i = daysBetween(new Date(), date);
        System.out.println(i);
    }*/
}
cloud-server-other/src/main/java/com/dsh/other/util/DateUtil.java
New file
@@ -0,0 +1,332 @@
/**
 * Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.dsh.other.util;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
import java.util.TimeZone;
public class DateUtil {
    private static TimeZone tz = TimeZone.getTimeZone("GMT+8");
    /**
     * 获取YYYY格式
     */
    public static String getYear() {
        return formatDate(new Date(), "yyyy");
    }
    /**
     * 获取YYYY格式
     */
    public static String getYear(Date date) {
        return formatDate(date, "yyyy");
    }
    /**
     * 获取YYYY-MM-DD格式
     */
    public static String getDay() {
        return formatDate(new Date(), "yyyy-MM-dd");
    }
    /**
     * 获取YYYY-MM-DD格式
     */
    public static String getDay(Date date) {
        return formatDate(date, "yyyy-MM-dd");
    }
    /**
     * 获取YYYYMMDD格式
     */
    public static String getDays() {
        return formatDate(new Date(), "yyyyMMdd");
    }
    /**
     * 获取YYYYMMDD格式
     */
    public static String getDays(Date date) {
        return formatDate(date, "yyyyMMdd");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss格式
     */
    public static String getTime() {
        return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss.SSS格式
     */
    public static String getMsTime() {
        return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
    }
    /**
     * 获取YYYYMMDDHHmmss格式
     */
    public static String getAllTime() {
        return formatDate(new Date(), "yyyyMMddHHmmss");
    }
    /**
     * 获取YYYY-MM-DD HH:mm:ss格式
     */
    public static String getTime(Date date) {
        return formatDate(date, "yyyy-MM-dd HH:mm:ss");
    }
    public static String formatDate(Date date, String pattern) {
        String formatDate = null;
        if (StringUtils.isNotBlank(pattern)) {
            formatDate = DateFormatUtils.format(date, pattern);
        } else {
            formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
        }
        return formatDate;
    }
    /**
     * 日期比较,如果s>=e 返回true 否则返回false)
     *
     * @author luguosui
     */
    public static boolean compareDate(String s, String e) {
        if (parseDate(s) == null || parseDate(e) == null) {
            return false;
        }
        return parseDate(s).getTime() >= parseDate(e).getTime();
    }
    /**
     * 格式化日期
     */
    public static Date parseDate(String date) {
        return parse(date, "yyyy-MM-dd");
    }
    /**
     * 格式化日期
     */
    public static Date parseTimeMinutes(String date) {
        return parse(date, "yyyy-MM-dd HH:mm");
    }
    /**
     * 格式化日期
     */
    public static Date parseTime(String date) {
        return parse(date, "yyyy-MM-dd HH:mm:ss");
    }
    /**
     * 格式化日期
     */
    public static Date parse(String date, String pattern) {
        try {
            if(Objects.nonNull(date)) {
                return DateUtils.parseDate(date, pattern);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 格式化日期
     */
    public static String format(Date date, String pattern) {
        return DateFormatUtils.format(date, pattern);
    }
    /**
     * 把日期转换为Timestamp
     */
    public static Timestamp format(Date date) {
        return new Timestamp(date.getTime());
    }
    /**
     * 校验日期是否合法
     */
    public static boolean isValidDate(String s) {
        return parse(s, "yyyy-MM-dd HH:mm:ss") != null;
    }
    /**
     * 校验日期是否合法
     */
    public static boolean isValidDate(String s, String pattern) {
        return parse(s, pattern) != null;
    }
    public static int getDiffYear(String startTime, String endTime) {
        DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
        try {
            int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse(
                    startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365);
            return years;
        } catch (Exception e) {
            // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
            return 0;
        }
    }
    /**
     * <li>功能描述:时间相减得到天数
     */
    public static long getDaySub(String beginDateStr, String endDateStr) {
        long day = 0;
        SimpleDateFormat format = new SimpleDateFormat(
                "yyyy-MM-dd");
        Date beginDate = null;
        Date endDate = null;
        try {
            beginDate = format.parse(beginDateStr);
            endDate = format.parse(endDateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
        // System.out.println("相隔的天数="+day);
        return day;
    }
    /**
     * 得到n天之后的日期
     */
    public static String getAfterDayDate(String days) {
        int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sdfd.format(date);
        return dateStr;
    }
    /**
     * 得到n天之后是周几
     */
    public static String getAfterDayWeek(String days) {
        int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("E");
        String dateStr = sdf.format(date);
        return dateStr;
    }
    /**
     * 得到系统日期
     *
     * @return
     */
    public static Date getDate() {
        TimeZone.setDefault(tz);
        return new Date();
    }
    /**
     * 获取当前毫秒数
     *
     * @return long
     */
    public static long getCurMilli() {
        long millisecond = 0;
        Calendar cal = Calendar.getInstance();
        millisecond = cal.getTimeInMillis();
        return millisecond;
    }
    /**
     * 得到系统Calendar日期
     *
     * @return
     */
    public static Calendar getCalendar() {
        TimeZone.setDefault(tz);
        Calendar cal = Calendar.getInstance();
        return cal;
    }
    /**
     * 毫秒转日期时间
     *
     * @param millisecond
     * @return
     */
    public static String getDateTime(long millisecond) {
        if (millisecond == 0) {
            millisecond = getCurMilli();
        }
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar = getCalendar();
        calendar.setTimeInMillis(millisecond);
        return dateformat.format(calendar.getTime());
    }
    /**
     * 日期转毫秒(加分钟)
     *
     * @param date
     * @return
     */
    public static long getMillisecond_fz(String date, Integer day) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if ("".equals(date)) {
            newDate = sdf.format(DateUtil.getDate());
        } else {
            newDate = getDateTime(Long.parseLong(date));
        }
        Date dt = null;
        try {
            dt = sdf.parse(newDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.MINUTE, day);
        Date dt1 = rightNow.getTime();
        return dt1.getTime();
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/DoubleUtil.java
New file
@@ -0,0 +1,16 @@
package com.dsh.other.util;
import java.math.BigDecimal;
/**
 * Double文档
 */
public class DoubleUtil {
    public static Double format(Double num) {
        BigDecimal b = new BigDecimal(num);
        num = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return num;
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/EmojiUtil.java
New file
@@ -0,0 +1,95 @@
package com.dsh.other.util;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmojiUtil {
    /**
     * 编码
     *
     * @param str 待转换字符串
     * @return 转换后字符串
     * @throws UnsupportedEncodingException exception
     * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集)
     */
    public static String emojiEncode(String str)
            throws UnsupportedEncodingException {
        String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(
                        sb,
                        "[["
                                + URLEncoder.encode(matcher.group(1),
                                "UTF-8") + "]]");
            } catch (UnsupportedEncodingException e) {
//                LOG.error("emojiConvert error", e);
                throw e;
            }
        }
        matcher.appendTail(sb);
//        LOG.debug("emojiConvert " + str + " to " + sb.toString()
//                + ", len:" + sb.length());
        return sb.toString();
    }
    /**
     * 解码
     *
     * @param str 转换后的字符串
     * @return 转换前的字符串
     * @throws UnsupportedEncodingException exception
     * @Description 还原utf8数据库中保存的含转换后emoji表情的字符串
     */
    public static String emojiDecode(String str)
            throws UnsupportedEncodingException {
        String patternString = "\\[\\[(.*?)\\]\\]";
        Pattern pattern = Pattern.compile(patternString);
        if (str == null) {
            return str;
        }
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            try {
                matcher.appendReplacement(sb,
                        URLDecoder.decode(matcher.group(1), "UTF-8"));
            } catch (UnsupportedEncodingException e) {
//                LOG.error("emojiRecovery error", e);
                throw e;
            }
        }
        matcher.appendTail(sb);
//        LOG.debug("emojiRecovery " + str + " to " + sb.toString());
//        System.out.println("emojiRecovery " + str + " to " + sb.toString());
        return sb.toString();
    }
    /**
     * @param str 待过滤字符串
     * @return 过滤后字符串
     * exception
     * @Description 将字符串中的emoji表情过滤掉
     */
    public static String emojiSub(String str) {
        String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "");
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/HeaderAuthUtil.java
New file
@@ -0,0 +1,20 @@
package com.dsh.other.util;
import javax.servlet.http.HttpServletRequest;
public class HeaderAuthUtil {
    /**
     * 用户UserId变量
     */
    protected final static String HEADER_USERID = "userId";
    /**
     * 获取Request请求头UserId
     * @return
     */
    public static String getLoginAuthUserId (HttpServletRequest request) {
        String userId = request.getHeader(HEADER_USERID);
        return userId;
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/JsonUtil.java
New file
@@ -0,0 +1,157 @@
package com.dsh.other.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 *
 * 返回json数据封装工具类
 *
 * @ClassName: JsonUtil
 * @author: yuds
 * @date: 2019-09-20 09:19:27
 * @version: V1.0.0
 */
public class JsonUtil {
    /**
     * <li>将对象转化为json输出
     * <li>QuoteFieldNames ———-输出key时是否使用双引号,默认为true
     * <li>WriteMapNullValue ——–是否输出值为null的字段,默认为false
     * <li>WriteNullNumberAsZero —-数值字段如果为null,输出为0,而非null
     * <li>WriteNullListAsEmpty —–List字段如果为null,输出为[],而非null
     * <li>WriteNullStringAsEmpty —字符类型字段如果为null,输出为”“,而非null
     * <li>WriteNullBooleanAsFalse –Boolean字段如果为null,输出为false,而非null
     * <li>DisableCircularReferenceDetect 禁止循环引用检测
     */
    private static SerializerFeature[] serializerFeaturess = { SerializerFeature.WriteMapNullValue,
            SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullListAsEmpty,
            SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullBooleanAsFalse,
            SerializerFeature.DisableCircularReferenceDetect, };
    private JsonUtil() {
    }
    /**
     * fastJson Object转json
     *
     * @param obj
     * @return
     */
    public static String objToJson(Object obj) {
        return JSON.toJSONString(obj, serializerFeaturess);
    }
    /**
     * fastJson Object转json
     *
     * @param obj
     * @param dateFormat 时间格式化
     * @return
     */
    public static String objToJson(Object obj, String dateFormat) {
        return JSON.toJSONStringWithDateFormat(obj, dateFormat, serializerFeaturess);
    }
    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();
    /**
     * 将对象转换成json字符串。
     * <p>
     * Title: pojoToJson
     * </p>
     * <p>
     * Description:
     * </p>
     *
     * @param data
     * @return
     */
    public static String objectToJson(Object data) {
        try {
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            MAPPER.setDateFormat(fmt);
            String string = MAPPER.writeValueAsString(data);
            return string;
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 将json结果集转化为对象
     *
     * @param jsonData json数据
     * @param beanType    对象中的object类型
     * @return
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        try {
            T t = MAPPER.readValue(jsonData, beanType);
            return t;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 将json数据转换成pojo对象list
     * <p>
     * Title: jsonToList
     * </p>
     * <p>
     * Description:
     * </p>
     *
     * @param jsonData
     * @param beanType
     * @return
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
        try {
            List<T> list = MAPPER.readValue(jsonData, javaType);
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static JsonNode jsonToNode(String jsonData) {
        try {
            return MAPPER.readTree(jsonData);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
    public static Map<String, String> jsonToMap(String json) {
        JsonNode nodes = jsonToNode(json);
        Iterator<Map.Entry<String, JsonNode>> fields = nodes.fields();
        Map<String, String> map = new HashMap<>();
        while (fields.hasNext()) {
            Map.Entry<String, JsonNode> next = fields.next();
            String value = next.getValue().asText("");
            map.put(next.getKey(), value);
        }
        return map;
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/LocalDateTimeUtils.java
New file
@@ -0,0 +1,80 @@
package com.dsh.other.util;
import java.text.ParseException;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * LocalDateTimeUtils
 * LocalDateTime 时间工具
 *
 * @author yudeshan
 * @version V1.0
 */
public class LocalDateTimeUtils {
    private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 };
    private final static String[] constellationArr = new String[] { "摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" };
    /**
     * 取两个时间相差毫秒数
     *
     * @param start 开始时间
     * @param end   结束时间
     * @return
     */
    public static long betweenMillis(LocalDateTime start, LocalDateTime end) {
        Duration duration = Duration.between(start, end);
        return duration.toMillis();
    }
    /**
     * 通过生日计算年龄
     * @param birthDay 生日
     * @return
     * @throws ParseException
     */
    public static int getAgeByBirth(LocalDate birthDay) throws ParseException {
        int age = 0;
       //出生日期晚于当前时间,无法计算
        LocalDate now=LocalDate.now();
        if (birthDay.isAfter(now)) {
            throw new IllegalArgumentException( "生日大于当前时间!");
        }
        //当前年份
        int yearNow = now.getYear();
        //当前月份
        int monthNow = now.getMonthValue();
        //当前日期
        int dayOfMonthNow = now.getDayOfMonth();
        int yearBirth =birthDay.getYear();
        int monthBirth = birthDay.getMonthValue();
        int dayOfMonthBirth = birthDay.getDayOfMonth();
        //计算整岁数
        age = yearNow - yearBirth;
        if (monthNow <= monthBirth) {
            if (monthNow == monthBirth) {
                if (dayOfMonthNow < dayOfMonthBirth){
                    //当前日期在生日之前,年龄减一
                    age--;
                }
            } else {
                //当前月份在生日之前,年龄减一
                age--;
            }
        }
        return age;
    }
    /**
     * 根据月份计算星座
     */
    public static String getConstellation(LocalDate date) {
        Integer month=date.getMonthValue();
        Integer day=date.getDayOfMonth();
        return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month];
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/MessageUtils.java
New file
@@ -0,0 +1,26 @@
package com.dsh.other.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
@Component
public class MessageUtils {
    @Autowired
    private MessageSource messageSource;
    /**
     * 根据消息键和参数 获取消息 委托给spring messageSource
     *
     * @param code 消息键
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public String get(String code, Object... args) {
        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/RedisUtil.java
New file
@@ -0,0 +1,127 @@
package com.dsh.other.util;
import com.alibaba.csp.sentinel.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 * Redis工具类
 */
@Component
public class RedisUtil {
    @Autowired
    private JedisPool jedisPool;
    /**
     * 向redis中存储字符串没有过期时间
     * Storing strings in Redis without an expiration time.
     * @param key
     * @param value
     */
    public void setStrValue(String key, String value){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String set = resource.set(key, value);
            closeJedis(resource);
        }
    }
    /**
     * 以分钟为单位设置存储值(设置过期时间)
     * Set storage value in minutes (set expiration time) as units.
     * @param key
     * @param value
     * @param time 秒
     */
    public void setStrValue(String key, String value, int time){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String setex = resource.setex(key, time, value);
            closeJedis(resource);
        }
    }
    /**
     * 从redis中获取值
     * @param key
     * @return
     */
    public String getValue(String key){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            String data = resource.get(key);
            closeJedis(resource);
            return data;
        }
        return null;
    }
    /**
     * 批量获取
     * @param kes
     * @return
     */
    public List<Object> getValues(List<String> kes){
        if(null != kes){
            Jedis resource = jedisPool.getResource();
            Pipeline pipelined = resource.pipelined();
            for(String key : kes){
                pipelined.get(key);
            }
            List<Object> list = pipelined.syncAndReturnAll();
            closeJedis(resource);
            pipelined.clear();
            try {
                pipelined.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            List<Object> data = new ArrayList<>();
            for(Object o : list){
                if(null != o){
                    data.add(o);
                }
            }
            return data;
        }
        return null;
    }
    /**
     * 删除key
     * @param key
     */
    public void remove(String key){
        if(StringUtil.isNotEmpty(key)){
            Jedis resource = jedisPool.getResource();
            Long del = resource.del(key);
            closeJedis(resource);
        }
    }
    /**
     * 删除资源
     * @param jedis
     */
    public void closeJedis(Jedis jedis){
        if(null != jedis){
            jedis.close();
        }
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/ResultUtil.java
New file
@@ -0,0 +1,191 @@
package com.dsh.other.util;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * 定义统一返回对象
 */
@ApiModel(value = "统一返回结果集")
public class ResultUtil<T> {
    public static final Integer SUCCESS = 200;
    public static final Integer PARAM_ERROR = 300;
    public static final Integer RUNTIME_ERROR = 400;
    public static final Integer ERROR = 500;
    public static final Integer TOKEN_ERROR = 600;
    public static final Integer SIGN_ERROR = 700;
    public static final String Token = "TOKEN_INVALID";
    public static final String SIGN = "SIGN_INVALID";
    @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效")
    private Integer code;//备用状态码
    @ApiModelProperty(name = "msg", value = "返回结果说明")
    private String msg;//返回说明
    @ApiModelProperty(name = "data", value = "返回结果值")
    private T data;//返回数据
    public String getMsg() {
        return msg;
    }
    public T getData() {
        return data;
    }
    public Integer getCode() {
        return code;
    }
    private ResultUtil(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    private ResultUtil(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg){
        return new ResultUtil<>(code, msg);
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){
        return new ResultUtil<>(code, msg, data);
    }
    /**
     * 错误信息
     * @return
     */
    public static ResultUtil error(String mag){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, new JSONObject());
    }
    /**
     * 错误信息
     * @return
     */
    public static <T> ResultUtil <T> error(String mag, T obj){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, obj);
    }
    /**
     * token失效
     * @return
     */
    public static ResultUtil tokenErr(){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new JSONObject());
    }
    /**
     * token失效
     * @return
     */
    public static ResultUtil tokenErr(String msg){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new JSONObject());
    }
    /**
     * 参数异常
     * @return
     */
    public static  ResultUtil paranErr(){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", new JSONObject());
    }
    /**
     * 参数异常
     * @return
     */
    public static <T> ResultUtil<T> paranErr(T data){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    @Autowired
    private static MessageUtils messageUtils;
    /**
     * 运行异常
     * @return
     */
    public static ResultUtil runErr(){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new JSONObject());
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data, String msg){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data);
    }
    /**
     * 返回成功
     * @param
     * @return
     */
    public static ResultUtil success(){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new JSONObject());
    }
    /**
     * 返回成功
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data);
    }
    /**
     * 返回成功
     * @param msg
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(String msg, T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data);
    }
    /**
     * 签名无效
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> sign(){
        return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN);
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/StrUtils.java
New file
@@ -0,0 +1,102 @@
package com.dsh.other.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class StrUtils {
    /**
     * 把逗号分隔的字符串转换字符串数组
     * Convert comma-separated string to string array.
     * @param str
     * @return
     */
    public static String[] splitStr2StrArr(String str,String split) {
        if (str != null && !str.equals("")) {
            return str.split(split);
        }
        return null;
    }
    /**
     * 把逗号分隔字符串转换List的Long
     *
     * @param str
     * @return
     */
    public static List<Long> splitStr2LongArr(String str) {
        String[] strings = splitStr2StrArr(str,",");
        if (strings == null) return null;
        List<Long> result = new ArrayList<>();
        for (String string : strings) {
            result.add(Long.parseLong(string));
        }
        return result;
    }
    /**
     * 把逗号分隔字符串转换List的Long
     *
     * @param str
     * @return
     */
    public static List<Long> splitStr2LongArr(String str,String split) {
        String[] strings = splitStr2StrArr(str,split);
        if (strings == null) return null;
        List<Long> result = new ArrayList<>();
        for (String string : strings) {
            result.add(Long.parseLong(string));
        }
        return result;
    }
    public static String getRandomString(int length) {
        String str = "0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(10);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String getComplexRandomString(int length) {
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(62);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String getClassCodeString(int length) {
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number =random.nextInt(36);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
    public static String convertPropertiesToHtml(String properties){
        //1:容量:6:32GB_4:样式:12:塑料壳
        StringBuilder sBuilder = new StringBuilder();
        String[] propArr = properties.split("_");
        for (String props : propArr) {
            String[] valueArr = props.split(":");
            sBuilder.append(valueArr[1]).append(":").append(valueArr[3]).append("<br>");
        }
        return sBuilder.toString();
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/StringUtil.java
New file
@@ -0,0 +1,25 @@
package com.dsh.other.util;
import cn.mb.cloud.common.core.exception.BusinessException;
import org.springframework.util.StringUtils;
/**
 * 判断字符串不能为空和null,以及号码格式效验,
 * 否则则抛出异常信息
 */
public class StringUtil {
    private StringUtil() {
    }
    public static void checkNull(String str, String message) throws BusinessException {
        if (!StringUtils.hasLength(str)) {
            throw new BusinessException(message);
        }
    }
    public static void checkFormat(String str, String message) throws BusinessException {
        if (!str.matches("^1[2|3|4|5|6|7|8|9][0-9]{9}$")) {
            throw new BusinessException(message);
        }
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/StudyTimeUtil.java
New file
@@ -0,0 +1,37 @@
package com.dsh.other.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
//根据当前传入的时间,返回距离当前时间多少天
public class StudyTimeUtil {
    private StudyTimeUtil() {
    }
    /**
     * 获取两个时间的间隔(秒)Obtain the time difference between two instances (in seconds).
     *
     * @param startDate 开始的时间
     * @return 返回当前时间与开始时间的相差天数
     */
    public static int getDateBetween(Date startDate) throws ParseException {
        Date endDate = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        long startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime();
        long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime();
        int days = (int)((endDateTime - startDateTime)  / (1000 * 3600 * 24));
        return days;
    }
    public static Date getStartDate(LocalDateTime localDate) {
        Date date = Date.from(localDate.atZone(ZoneId.systemDefault()).toInstant());
        return date;
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/TokenUtil.java
New file
@@ -0,0 +1,32 @@
package com.dsh.other.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public class TokenUtil {
    @Autowired
    private RedisUtil redisUtil;
    public Integer getUserIdFormRedis(HttpServletRequest request) throws Exception {
        String requestHeader = request.getHeader("Authorization");
        if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
            requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1);
            String key = null;
            int length = requestHeader.length();
            if(length > 32){
                key = requestHeader.substring(length - 32);
            }else{
                key = requestHeader;
            }
            String value = redisUtil.getValue(key);
            return null != value ? Integer.valueOf(value) : null;
        }else{
            return null;
        }
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/Auth.java
copy from cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/Auth.java copy to cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/Auth.java
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/Base64Utils.java
New file
@@ -0,0 +1,48 @@
package com.dsh.other.util.akeylogin;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Utils {
    private static final Charset DEFAULT_CHARSET;
    public Base64Utils() {
    }
    public static byte[] encode(byte[] src) {
        return src.length == 0 ? src : Base64.getEncoder().encode(src);
    }
    public static byte[] decode(byte[] src) {
        return src.length == 0 ? src : Base64.getDecoder().decode(src);
    }
    public static byte[] encodeUrlSafe(byte[] src) {
        return src.length == 0 ? src : Base64.getUrlEncoder().encode(src);
    }
    public static byte[] decodeUrlSafe(byte[] src) {
        return src.length == 0 ? src : Base64.getUrlDecoder().decode(src);
    }
    public static String encodeToString(byte[] src) {
        return src.length == 0 ? "" : new String(encode(src), DEFAULT_CHARSET);
    }
    public static byte[] decodeFromString(String src) {
        return src.isEmpty() ? new byte[0] : decode(src.getBytes(DEFAULT_CHARSET));
    }
    public static String encodeToUrlSafeString(byte[] src) {
        return new String(encodeUrlSafe(src), DEFAULT_CHARSET);
    }
    public static byte[] decodeFromUrlSafeString(String src) {
        return decodeUrlSafe(src.getBytes(DEFAULT_CHARSET));
    }
    static {
        DEFAULT_CHARSET = StandardCharsets.UTF_8;
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/BaseUtils.java
New file
@@ -0,0 +1,23 @@
package com.dsh.other.util.akeylogin;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
public class BaseUtils {
    public static boolean isEmpty(Object target) {
        if (target == null) {
            return true;
        }
        if (target instanceof String && "".equals(target)) {
            return true;
        } else if (target instanceof Collection) {
            return ((Collection<?>) target).isEmpty();
        } else if (target instanceof Map) {
            return ((Map<?, ?>) target).isEmpty();
        } else if (target.getClass().isArray()) {
            return Array.getLength(target) == 0;
        }
        return false;
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/DES.java
New file
@@ -0,0 +1,90 @@
package com.dsh.other.util.akeylogin;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
public class DES {
    public static final String ALGORITHM = "DES";
    public static final String PADDING = "DES/CBC/PKCS5Padding";
    private static final byte[] DEFAULT_INITIALIZATION_VECTOR = ("00000000".getBytes());
    private String padding = PADDING;
    private byte[] initializationVectorBytes = DEFAULT_INITIALIZATION_VECTOR;
    private AlgorithmParameterSpec paramSpec;
    public DES() {
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(String padding) {
        this.padding = padding;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(String padding, byte[] initializationVectorBytes) {
        this.padding = padding;
        this.initializationVectorBytes = initializationVectorBytes;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public DES(byte[] initializationVectorBytes) {
        this.initializationVectorBytes = initializationVectorBytes;
        this.paramSpec = new IvParameterSpec(initializationVectorBytes);
    }
    public byte[] encodeBytes(byte[] data, byte[] key) throws Exception {
        Key secretKey = getKey(key);
        Cipher cipher = Cipher.getInstance(padding);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec);
        byte[] bytes = cipher.doFinal(data);
        return bytes;
    }
    public byte[] decodeBytes(byte[] data, byte[] key) throws Exception {
        Key secretKey = getKey(key);
        Cipher cipher = Cipher.getInstance(padding);
        cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);
        return cipher.doFinal(data);
    }
    public String getPadding() {
        return padding;
    }
    public byte[] getInitializationVectorBytes() {
        return initializationVectorBytes;
    }
    private static Key getKey(byte[] key) throws Exception {
        DESKeySpec dks = new DESKeySpec(key);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
        SecretKey secretKey = keyFactory.generateSecret(dks);
        return secretKey;
    }
    public static byte[] decode(byte[] data, byte[] key) throws Exception {
        return decode(data, key, DEFAULT_INITIALIZATION_VECTOR);
    }
    public static byte[] encode(byte[] data, byte[] key) throws Exception {
        return encode(data, key, DEFAULT_INITIALIZATION_VECTOR);
    }
    public static byte[] decode(byte[] data, byte[] key, byte[] ivBytes) throws Exception {
        DES des = new DES(PADDING, ivBytes);
        return des.decodeBytes(data, key);
    }
    public static byte[] encode(byte[] data, byte[] key, byte[] ivBytes) throws Exception {
        DES des = new DES(PADDING, ivBytes);
        return des.encodeBytes(data, key);
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/LoginUtil.java
copy from cloud-server-account/src/main/java/com/dsh/course/util/akeylogin/LoginUtil.java copy to cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/LoginUtil.java
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/Md5Util.java
New file
@@ -0,0 +1,48 @@
package com.dsh.other.util.akeylogin;
import java.security.MessageDigest;
public class Md5Util {
    private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    /**
     * MD5加密
     *
     * @param origin      字符
     * @param charsetname 编码
     * @return
     */
    public static String MD5Encode(String origin, String charsetname) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (null == charsetname || "".equals(charsetname)) {
                resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
            } else {
                resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
            }
        } catch (Exception e) {
        }
        return resultString;
    }
    public static String byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }
    public static String byteToHexString(byte b) {
        int n = b;
        if (n < 0) {
            n += 256;
        }
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigIts[d1] + hexDigIts[d2];
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/akeylogin/SignUtil.java
New file
@@ -0,0 +1,24 @@
package com.dsh.other.util.akeylogin;
import java.util.Map;
import java.util.TreeMap;
public class SignUtil {
    private static String charset = "utf8";
    public static String getSign(Map<String, Object> data, String secret) {
        if (data == null) {
            return null;
        }
        //排序参数
        Map<String, Object> mappingList = new TreeMap<>(data);
        StringBuilder plainText= new StringBuilder();
        mappingList.forEach((k, v) -> {
            if (!"sign".equals(k) && !BaseUtils.isEmpty(v)) {
                plainText.append(String.format("%s=%s&", k, v));
            }
        });
        String substring = plainText.substring(0, plainText.length() - 1);
        return Md5Util.MD5Encode(substring + secret, charset);
    }
}
cloud-server-other/src/main/resources/bootstrap.properties
New file
@@ -0,0 +1,28 @@
spring.profiles.active=@profiles.active@
spring.application.name=@artifactId@
spring.cloud.nacos.username=@profiles.nacos-username@
spring.cloud.nacos.password=@profiles.nacos-password@
spring.cloud.nacos.config.server-addr=@profiles.nacos-addr@
spring.cloud.nacos.config.namespace=@profiles.nacos-namespace@
spring.cloud.nacos.config.group=@profiles.group@
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.extension-configs[0].data-id=${spring.application.name}.${spring.cloud.nacos.config.file-extension}
spring.cloud.nacos.config.extension-configs[0].group=@profiles.group@
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=@profiles.global.config@.${spring.cloud.nacos.config.file-extension}
spring.cloud.nacos.config.extension-configs[1].group=@profiles.group@
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.discovery.server-addr=@profiles.nacos-addr@
spring.cloud.nacos.discovery.namespace=@profiles.nacos-namespace@
spring.cloud.nacos.discovery.register-enabled=true
spring.cloud.nacos.discovery.group=@profiles.group@
spring.main.allow-bean-definition-overriding=true
spring.flyway.enabled=false
# \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0479\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=4096
feign.compression.request.enabled=true
feign.compression.response.enabled=true
cloud-server-other/src/main/resources/logback-spring.xml
New file
@@ -0,0 +1,227 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration  scan="true" scanPeriod="10 seconds">
    <contextName>logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
    <property name="log.path" value="/usr/local/server/logs"/>
    <!--0. 日志格式和颜色渲染 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!--1. 输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--2. 输出到文档-->
    <!-- 2.1 level为 DEBUG 日志,时间滚动输出  -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${log.path}/${artifactId}/debug.log</file>
        <!--日志文档输出格式  Output format of the log document.-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档 -->
            <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.2 level为 INFO 日志,时间滚动输出  -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${log.path}/${artifactId}/info.log</file>
        <!--日志文档输出格式  Output format of the log document.-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.3 level为 WARN 日志,时间滚动输出  -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${log.path}/${artifactId}/warn.log</file>
        <!--日志文档输出格式  Output format of the log document.-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.4 level为 ERROR 日志,时间滚动输出  -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${log.path}/${artifactId}/error.log</file>
        <!--日志文档输出格式  Output format of the log document.-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.5 所有 除了DEBUG级别的其它高于DEBUG的 日志,记录到一个文件  -->
    <appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>${log.path}/${artifactId}/all.log</file>
        <!--日志文档输出格式  Output format of the log document.-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录  Rolling strategy of the logger, recording by date or by size.-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${artifactId}/%d{yyyy-MM-dd}/all-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文档记录除了DEBUG级别的其它高于DEBUG的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>
    <!--
        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
        以及指定<appender>。<logger>仅有一个name属性,
        一个可选的level和一个可选的addtivity属性。
        name:用来指定受此logger约束的某一个包或者具体的某一个类。
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
              还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。
              如果未设置此属性,那么当前logger将会继承上级的级别。
        addtivity:是否向上级logger传递打印信息。默认是true。
        <logger name="org.springframework.web" level="info"/>
        <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
    -->
    <!--
        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
        不能设置为INHERITED或者同义词NULL。默认是DEBUG
        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
    -->
    <!-- 4  最终的策略:
                 基本策略(root级) + 根据profile在启动时, logger标签中定制化package日志级别(优先级高于上面的root级)-->
    <springProfile name="dev">
        <root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="ALL_FILE" />
        </root>
        <logger name="com.dsh" level="debug"/>
        <logger name="business-log" level="warn"/>
    </springProfile>
    <springProfile name="fat">
        <root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="ALL_FILE" />
        </root>
        <logger name="com.dsh.course.mapper" level="error"/>
        <logger name="business-log" level="warn"/>
    </springProfile>
    <springProfile name="prod">
        <root level="warn">
            <!-- 生产环境最好不配置console写文件 -->
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="ALL_FILE" />
        </root>
        <logger name="com.dsh.course.mapper" level="error"/>
        <logger name="business-log" level="warn"/>
    </springProfile>
</configuration>
cloud-server-other/src/main/resources/redis.properties
New file
@@ -0,0 +1,13 @@
spring.redis.database=0
# Redis·þÎñÆ÷µØÖ·
spring.redis.host=@redis.addr@
# Redis·þÎñÆ÷Á¬½Ó¶Ë¿Ú
spring.redis.port=@redis.port@
# Redis·þÎñÆ÷Á¬½ÓÃÜÂ루ĬÈÏΪ¿Õ£©
spring.redis.password=@redis.password@
spring.redis.jedis.pool.max-active=1024
spring.redis.jedis.pool.max-wait=10000
spring.redis.jedis.pool.max-idle=200
spring.redis.jedis.pool.min-idle=50
spring.redis.timeout=10000
spring.redis.block-when-exhausted=true
cloud-server-parent
@@ -1 +1 @@
Subproject commit ec83f41684c6e3f434d1cef1d106212505b8d1b0
Subproject commit d2590ca908ebc50eaf7d8cb621bdec4157142fd3
nacos/LICENSE
New file
@@ -0,0 +1,316 @@
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
   1. Definitions.
      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.
      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.
      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (properties) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.
      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.
      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.
      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.
      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).
      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.
      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."
      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.
   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.
   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.
   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:
      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and
      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and
      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and
      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.
      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.
   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.
   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.
   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.
   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.
   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.
   END OF TERMS AND CONDITIONS
   APPENDIX: How to apply the Apache License to your work.
      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.
   Copyright [yyyy] [name of copyright owner]
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
       http://www.apache.org/licenses/LICENSE-2.0
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
------
This product has a bundle logback, which is available under the EPL v1.0 License.
The source code of logback can be found at https://github.com/qos-ch/logback.
Logback LICENSE
---------------
Logback: the reliable, generic, fast and flexible logging framework.
Copyright (C) 1999-2015, QOS.ch. All rights reserved.
This program and the accompanying materials are dual-licensed under
either the terms of the Eclipse Public License v1.0 as published by
the Eclipse Foundation
  or (per the licensee's choosing)
under the terms of the GNU Lesser General Public License version 2.1
as published by the Free Software Foundation.
------
This product has a bundle slf4j, which is available under the MIT License.
The source code of slf4j can be found at https://github.com/qos-ch/slf4j.
 Copyright (c) 2004-2017 QOS.ch
 All rights reserved.
 Permission is hereby granted, free  of charge, to any person obtaining
 a  copy  of this  software  and  associated  documentation files  (the
 "Software"), to  deal in  the Software without  restriction, including
 without limitation  the rights to  use, copy, modify,  merge, publish,
 distribute,  sublicense, and/or sell  copies of  the Software,  and to
 permit persons to whom the Software  is furnished to do so, subject to
 the following conditions:
 The  above  copyright  notice  and  this permission  notice  shall  be
 included in all copies or substantial portions of the Software.
 THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
 EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
 MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------
This product has a bundle javassist, which is available under the ASL2 License.
The source code of javassist can be found at https://github.com/jboss-javassist/javassist.
 Copyright (C) 1999- by Shigeru Chiba, All rights reserved.
 Javassist (JAVA programming ASSISTant) makes Java bytecode manipulation simple.
 It is a class library for editing bytecodes in Java; it enables Java programs to define a new class
 at runtime and to modify a class file when the JVM loads it. Unlike other similar bytecode editors,
 Javassist provides two levels of API: source level and bytecode level. If the users use the source- level API,
 they can edit a class file without knowledge of the specifications of the Java bytecode.
 The whole API is designed with only the vocabulary of the Java language.
 You can even specify inserted bytecode in the form of source text; Javassist compiles it on the fly.
 On the other hand, the bytecode-level API allows the users to directly edit a class file as other editors.
 This software is distributed under the Mozilla Public License Version 1.1,
 the GNU Lesser General Public License Version 2.1 or later, or the Apache License Version 2.0.
------
This product has a bundle jna, which is available under the ASL2 License.
The source code of jna can be found at https://github.com/java-native-access/jna.
 This copy of JNA is licensed under the
 Apache (Software) License, version 2.0 ("the License").
 See the License for details about distribution rights, and the
 specific rights regarding derivate works.
 You may obtain a copy of the License at:
 http://www.apache.org/licenses/
 A copy is also included in the downloadable source code package
 containing JNA, in file "AL2.0", under the same directory
 as this file.
------
This product has a bundle guava, which is available under the ASL2 License.
The source code of guava can be found at https://github.com/google/guava.
 Copyright (C) 2007 The Guava authors
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
      http://www.apache.org/licenses/LICENSE-2.0
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
------
This product has a bundle OpenMessaging, which is available under the ASL2 License.
The source code of OpenMessaging can be found at https://github.com/openmessaging/openmessaging.
 Copyright (C) 2017 The OpenMessaging authors.
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
      http://www.apache.org/licenses/LICENSE-2.0
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
nacos/NOTICE
New file
@@ -0,0 +1,36 @@
Nacos
Copyright 2018-2019 The Apache Software Foundation
This product includes software developed at
The Alibaba MiddleWare Group.
------
This product has a bundle netty:
                            The Spring oot Project
                            =================
Please visit the Netty web site for more information:
  * http://netty.io/
Copyright 2014 The Netty Project
The Netty Project licenses this file to you under the Apache License,
version 2.0 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at:
  http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
Also, please refer to each LICENSE.<component>.txt file, which is located in
the 'license' directory of the distribution file, for the license terms of the
components that this product depends on.
------
This product has a bundle commons-lang, which includes software from the Spring Framework,
under the Apache License 2.0 (see: StringUtils.containsWhitespace())
nacos/bin/derby.log
New file
@@ -0,0 +1,13 @@
----------------------------------------------------------------
Tue Jun 13 20:11:33 CST 2023:
Booting Derby version The Apache Software Foundation - Apache Derby - 10.14.2.0 - (1828579): instance a816c00e-0188-b4ab-2010-000019a79e60
on database directory E:\IDEA Workspaces\PlayPai\nacos\data\derby-data with class loader org.springframework.boot.loader.LaunchedURLClassLoader@26a1ab54
Loaded from jar:file:/E:/IDEA%20Workspaces/PlayPai/nacos/target/nacos-server.jar!/BOOT-INF/lib/derby-10.14.2.0.jar!/
java.vendor=Oracle Corporation
java.runtime.version=1.8.0_151-b12
user.dir=E:\IDEA Workspaces\PlayPai\nacos\bin
os.name=Windows 10
os.arch=amd64
os.version=10.0
derby.system.home=null
Database Class Loader started - derby.database.classpath=''
nacos/bin/logs/access_log.2023-06-13.log
New file
@@ -0,0 +1,514 @@
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos HTTP/1.1" 302 - 0 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/ HTTP/1.1" 200 2780 54 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/bootstrap.css HTTP/1.1" 200 123294 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/console1412.css HTTP/1.1" 200 156959 9 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/font-awesome.css HTTP/1.1" 200 33850 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/icon.css HTTP/1.1" 200 5176 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/codemirror.css HTTP/1.1" 200 8858 7 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/css/main.css?04818f5ec59842280923 HTTP/1.1" 200 473259 6 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/css/merge.css HTTP/1.1" 200 3866 9 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/jquery.js HTTP/1.1" 200 89476 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/xml.js HTTP/1.1" 200 13059 7 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.js HTTP/1.1" 200 366246 11 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/javascript.js HTTP/1.1" 200 32209 10 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.addone.lint.js HTTP/1.1" 200 8521 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.addone.json-lint.js HTTP/1.1" 200 1443 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.lib.json-lint.js HTTP/1.1" 200 16798 6 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.addone.fullscreen.js HTTP/1.1" 200 1983 11 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/codemirror.lib.clike-lint.js HTTP/1.1" 200 31531 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/loader.js HTTP/1.1" 200 28899 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/merge.js HTTP/1.1" 200 37883 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/diff_match_patch.js HTTP/1.1" 200 19192 7 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/js/main.js?04818f5ec59842280923 HTTP/1.1" 200 1534009 14 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/vs/editor/editor.main.js HTTP/1.1" 200 1824087 20 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/img/logo-2000-390.svg HTTP/1.1" 200 2106 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/v1/console/server/state?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 82 19 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/icons/icon-font.woff2 HTTP/1.1" 200 4368 7 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId=5e1ecee8-cc8f-4bd2-9357-3ff17515f213 HTTP/1.1" 200 151 36 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/vs/editor/editor.main.css HTTP/1.1" 200 172199 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 76 38 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/js/vs/editor/editor.main.nls.zh-cn.js HTTP/1.1" 200 22864 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:45 +0800] "GET /nacos/console-ui/public/img/nacos-logo.png HTTP/1.1" 200 1529 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:11:55 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId= HTTP/1.1" 200 151 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:12:06 +0800] "GET /nacos/v1/console/namespaces?checkNamespaceIdExist=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&customNamespaceId=&namespaceId= HTTP/1.1" 200 15 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:12:06 +0800] "POST /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 17 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:12:06 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId= HTTP/1.1" 200 299 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:12:08 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId= HTTP/1.1" 200 299 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:12:53 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 76 6 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:12:55 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 76 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:34 +0800] "POST /nacos/v1/cs/configs?import=true&namespace=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 85 83 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:34 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 13972 33 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:46 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-image.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 39 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:46 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 11400 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:51 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-job-admin.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 11 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:51 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8923 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:55 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-upms.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 15 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:55 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 7463 6 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:58 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:58 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 2951 17 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:13:58 +0800] "GET /nacos/console-ui/public/js/vs/base/worker/workerMain.js HTTP/1.1" 200 151535 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:13:58 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-gateway.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 216 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:13:58 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-gateway.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 241 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:14:14 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 23 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:14:14 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 2810 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:34:22 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 7 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:34:22 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 2551 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:34:25 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 7068 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:35:04 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 217 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:35:05 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwNH0.nDaObfgEtWYnFlsQwhyskZDYSi4Kt-CLEoMrOC1jB-s HTTP/1.1" 200 2092 6 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:35:05 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwNH0.nDaObfgEtWYnFlsQwhyskZDYSi4Kt-CLEoMrOC1jB-s HTTP/1.1" 200 1879 3 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:35:05 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwNH0.nDaObfgEtWYnFlsQwhyskZDYSi4Kt-CLEoMrOC1jB-s HTTP/1.1" 404 23 2 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:35:05 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwNH0.nDaObfgEtWYnFlsQwhyskZDYSi4Kt-CLEoMrOC1jB-s HTTP/1.1" 200 2092 2 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:35:05 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-gateway-dev.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwNH0.nDaObfgEtWYnFlsQwhyskZDYSi4Kt-CLEoMrOC1jB-s HTTP/1.1" 404 23 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:35:09 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 72 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:35:09 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 73 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:35:11 +0800] "POST /nacos/v1/ns/instance?app=unknown&metadata=%7B%22preserved.register.source%22%3A%22SPRING_CLOUD%22%7D&ip=192.168.110.80&weight=1.0&ephemeral=true&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8&groupName=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&enable=true&healthy=true&clusterName=DEFAULT HTTP/1.1" 200 2 14 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:11 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 5 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:35:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 20 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 9 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:31 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 9 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:41 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29517 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:35:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:35:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:36:03 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-auth.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:36:03 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-auth.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1420 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:36:03 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-auth.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 218 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:36:03 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-auth.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 222 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:36:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:36:08 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 7068 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:36:10 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29514 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:36:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:36:14 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-auth.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:36:14 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 5851 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:36:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:36:16 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:36:16 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1503 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:36:17 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-app.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 218 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:36:17 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 224 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:36:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:36:22 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 5851 10 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:36:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 6 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:36:24 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:36:24 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 2324 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:36:24 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=application.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 92 227 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:36:24 +0800] "GET /nacos/v1/cs/configs/listener?dataId=application.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 112 232 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:36:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:36:27 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 5851 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:36:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:40 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:36:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 3 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:36:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:36:59 +0800] "GET /nacos/console-ui/public/js/vs/editor/contrib/suggest/browser/media/String_inverse_16x.svg HTTP/1.1" 200 4740 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:37:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:37:04 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-account&group=DEFAULT_GROUP&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:37:04 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 6 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:37:04 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6061 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:37:08 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:37:08 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1503 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:08 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-app.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 214 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:37:08 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 216 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:09 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29508 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:37:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:37:12 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6061 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:37:14 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:37:14 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 417 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:14 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-account&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=DEFAULT_GROUP HTTP/1.1" 200 41 214 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:37:14 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-account&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 217 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:37:17 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6061 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 4 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:37:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:37:24 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:37:24 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1503 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:24 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-app.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 222 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:37:24 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-app.properties&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 224 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:37:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:37:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:37:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:37:39 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29504 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:37:39 +0800] "GET /nacos HTTP/1.1" 302 - 0 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:37:39 +0800] "GET /nacos/v1/console/server/state?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 82 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:37:39 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 299 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:37:40 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 76 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:37:41 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6061 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:37:46 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-account&group=DEFAULT_GROUP&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:37:46 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 5851 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:37:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:37:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:37:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:37:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 0 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 0 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:08 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29513 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:38:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 5 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:38 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29508 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:38:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 7 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:38:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:07 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:39:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:39:12 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-account&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:39:12 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:39:12 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6713 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:39:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 4 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:37 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:39:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:39:42 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 6713 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:39:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 4 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:39:44 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:39:44 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1069 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:39:44 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-account&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 215 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:39:44 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 218 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:39:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:39:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:39:56 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-activity&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:39:56 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:39:56 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 7577 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:39:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:06 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:40:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 7 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 0 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:40:34 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-competition&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:40:34 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:40:34 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8453 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:40:36 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:40:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 4 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:40:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:05 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29501 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:41:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:41:09 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-course&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:41:09 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:41:09 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 9314 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:41:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:35 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29511 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:41:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:41:41 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-other&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:41:41 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 5 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:41:41 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 10172 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:41:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:41:50 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-app.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:41:50 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:41:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:41:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:04 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29515 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:42:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:42:08 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:42:08 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1069 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:42:08 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-account&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 218 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:42:08 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 223 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:42:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:42:13 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:42:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:42:18 +0800] "GET /nacos/ HTTP/1.1" 304 - 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:42:18 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 299 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:42:18 +0800] "GET /nacos/v1/console/server/state?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 82 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:42:18 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:42:20 +0800] "GET /nacos/ HTTP/1.1" 304 - 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:42:20 +0800] "GET /nacos/v1/console/namespaces?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 299 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:42:20 +0800] "GET /nacos/v1/console/server/state?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 82 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:42:20 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:42:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:42:25 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:42:25 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1069 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:42:25 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-account&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 210 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:42:25 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 216 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:42:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:42:29 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:42:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:32 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:34 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29511 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:42:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:42:38 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 11 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:42:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:42 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:52 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:42:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:43:00 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:43:00 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1061 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:43:00 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-other&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 220 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:43:00 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 223 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:43:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:02 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:03 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29504 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:43:05 +0800] "GET /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true&show=all&dataId=mb-cloud-other.properties&group=DEFAULT_GROUP&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c HTTP/1.1" 200 - 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:43:05 +0800] "POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:43:05 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 9745 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:43:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:43:10 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other.properties&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:43:10 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other.properties&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1076 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:43:10 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-other.properties&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=DEFAULT_GROUP HTTP/1.1" 200 41 225 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:43:10 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-other.properties&group=DEFAULT_GROUP&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 227 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:43:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:12 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:43:14 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 9745 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:43:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:43:17 +0800] "DELETE /nacos/v1/cs/configs?dataId=mb-cloud-other.properties&group=DEFAULT_GROUP&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&message=true HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:43:17 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8872 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:43:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:22 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:33 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 0 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:33 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29502 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:43:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 73 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 200 1879 2 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 200 653 2 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:43:38 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account-dev.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:43:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:42 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 65 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:43:42 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 65 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:43:43 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 221 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:44 +0800] "POST /nacos/v1/ns/instance?app=mb-cloud-account&metadata=%7B%22preserved.register.source%22%3A%22SPRING_CLOUD%22%7D&ip=192.168.110.80&weight=1.0&ephemeral=true&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8&groupName=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&enable=true&healthy=true&clusterName=DEFAULT HTTP/1.1" 200 2 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:44 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:43:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:49 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:53 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 5 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:54 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:43:59 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:02 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29516 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:44:03 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 4 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:04 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:09 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:13 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:14 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:14 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29513 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:44:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:19 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 0 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:23 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:24 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:29 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:32 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29505 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:44:33 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 3 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:34 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:39 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:43 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:44 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29529 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:44:44 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:49 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:44:50 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:44:50 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1061 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:44:50 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-other&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 216 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:44:50 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 220 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:44:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:53 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:44:54 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:44:56 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:44:56 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-other&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1043 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:44:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:44:59 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8859 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:44:59 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:45:00 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-course&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:45:00 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-course&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1063 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:00 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-course&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 214 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:45:00 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-course&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 219 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:01 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29504 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:03 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:04 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:45:05 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:45:05 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-course&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1045 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:45:07 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8846 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:45:09 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-competition&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:45:09 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-competition&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1077 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:09 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:09 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-competition&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 214 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:45:09 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-competition&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 216 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:13 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:13 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29515 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:14 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:45:14 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 4 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:45:14 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-competition&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1061 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:45:16 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8833 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:45:18 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-activity&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:45:18 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-activity&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1071 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:18 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-activity&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 41 224 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:45:18 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-activity&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 61 226 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:19 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:23 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:45:23 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:45:23 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-activity&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1055 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:24 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:45:26 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8820 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:45:27 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&beta=true&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 60 1 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:45:27 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1069 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:28 +0800] "GET /nacos/v1/cs/communication/configWatchers?&dataId=mb-cloud-account&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&group=dsh-cloud HTTP/1.1" 200 92 223 Java/1.8.0_151 -
127.0.0.1 - - [13/Jun/2023:20:45:28 +0800] "GET /nacos/v1/cs/configs/listener?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 112 224 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:29 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:31 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29508 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:45:32 +0800] "POST /nacos/v1/cs/configs?message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 14 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
127.0.0.1 - - [13/Jun/2023:20:45:32 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&show=all&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 1053 2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:32 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 72 19301 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:32 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 200 648 2 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 200 1879 2 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 200 648 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:33 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account-dev.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIxOH0.dwLKTNIFPH3luETHfddJEBcf69b4jWgWdbRD6p9A8u4 HTTP/1.1" 404 23 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:34 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
127.0.0.1 - - [13/Jun/2023:20:45:35 +0800] "GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&search=accurate&message=true&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODM0MTcyNX0.ICFBhTzw_wWQz-NmrbTyXphVYY5ofcFqPHm-8gaeOak&username=nacos HTTP/1.1" 200 8807 3 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 -
192.168.110.80 - - [13/Jun/2023:20:45:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:39 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:43 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:44 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:49 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODIyMn0.m1YmSLUgQ9CCKT5rq3fbMuJmwOQ0XMOcNGhrqqzmf84&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:53 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:54 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 65 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:54 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1NH0.KCMf-yUxSuOnBc5LEU2_Fu_Bz4DVgAoZs-kxNXdtt80 HTTP/1.1" 404 23 0 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:54 +0800] "GET /nacos/v1/cs/configs?dataId=application.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1NH0.KCMf-yUxSuOnBc5LEU2_Fu_Bz4DVgAoZs-kxNXdtt80 HTTP/1.1" 200 1879 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:54 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1NH0.KCMf-yUxSuOnBc5LEU2_Fu_Bz4DVgAoZs-kxNXdtt80 HTTP/1.1" 200 648 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:55 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1NH0.KCMf-yUxSuOnBc5LEU2_Fu_Bz4DVgAoZs-kxNXdtt80 HTTP/1.1" 404 23 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:55 +0800] "GET /nacos/v1/cs/configs?dataId=mb-cloud-account-dev.properties&group=dsh-cloud&tenant=249087cd-61cc-4d83-83e1-bf6a75ef142c&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1NH0.KCMf-yUxSuOnBc5LEU2_Fu_Bz4DVgAoZs-kxNXdtt80 HTTP/1.1" 404 23 1 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:45:58 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 65 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:58 +0800] "POST /nacos/v1/auth/users/login?encoding=UTF-8&username=nacos HTTP/1.1" 200 192 66 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:45:59 +0800] "POST /nacos/v1/ns/instance?app=mb-cloud-account&metadata=%7B%22preserved.register.source%22%3A%22SPRING_CLOUD%22%7D&ip=192.168.110.80&weight=1.0&ephemeral=true&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8&groupName=dsh-cloud&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&enable=true&healthy=true&clusterName=DEFAULT HTTP/1.1" 200 2 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:00 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 2 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:46:00 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29501 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:46:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:03 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:03 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 500 - 29509 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:46:04 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:09 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:13 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 3 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:14 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 4 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:19 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:21 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:23 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:24 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:26 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:29 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:30 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29516 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:46:30 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29515 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:46:31 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:33 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:34 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 0 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:36 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:39 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 0 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:41 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:43 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:44 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:46 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:50 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:51 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:53 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:55 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:56 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:46:59 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29502 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:46:59 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 200 - 29502 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:47:00 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:47:01 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:47:03 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:47:05 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 2 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:47:06 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 3 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:47:10 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:47:11 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:47:13 +0800] "GET /nacos/v1/ns/instance/list?app=unknown&healthyOnly=false&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&clientIP=10.160.253.51&serviceName=dsh-cloud%40%40mb-cloud-account&udpPort=62462&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 602 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:47:15 +0800] "PUT /nacos/v1/ns/instance/beat?app=mb-cloud-account&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5001&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-account&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3ODM1OH0.lBLagXhCpwhSWgEoW-OBDHM3Z3WD9B0r-dAhKNaCi-s&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:47:16 +0800] "PUT /nacos/v1/ns/instance/beat?app=unknown&namespaceId=249087cd-61cc-4d83-83e1-bf6a75ef142c&port=5000&clusterName=DEFAULT&ip=192.168.110.80&serviceName=dsh-cloud%40%40mb-cloud-gateway&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4NjY3NzcwOX0.gcy5OUs66I-aSYuXGA6udJb_6-2Vqui9dCLOaj6KsNc&encoding=UTF-8 HTTP/1.1" 200 75 1 Nacos-Java-Client:v1.2.1 -
192.168.110.80 - - [13/Jun/2023:20:47:29 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 500 - 29515 Java/1.8.0_151 -
192.168.110.80 - - [13/Jun/2023:20:47:29 +0800] "POST /nacos/v1/cs/configs/listener HTTP/1.1" 500 - 29516 Java/1.8.0_151 -
nacos/bin/shutdown.cmd
New file
@@ -0,0 +1,24 @@
@echo off
rem Copyright 1999-2018 Alibaba Group Holding Ltd.
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem      http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.
if not exist "%JAVA_HOME%\bin\jps.exe" echo Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! & EXIT /B 1
setlocal
set "PATH=%JAVA_HOME%\bin;%PATH%"
echo killing nacos server
for /f "tokens=1" %%i in ('jps -m ^| find "nacos.nacos"') do ( taskkill /F /PID %%i )
echo Done!
nacos/bin/shutdown.sh
New file
@@ -0,0 +1,28 @@
#!/bin/bash
# Copyright 1999-2018 Alibaba Group Holding Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
cd `dirname $0`/../target
target_dir=`pwd`
pid=`ps ax | grep -i 'nacos.nacos' | grep ${target_dir} | grep java | grep -v grep | awk '{print $1}'`
if [ -z "$pid" ] ; then
        echo "No nacosServer running."
        exit -1;
fi
echo "The nacosServer(${pid}) is running..."
kill ${pid}
echo "Send shutdown request to nacosServer(${pid}) OK"
nacos/bin/startup.cmd
New file
@@ -0,0 +1,95 @@
@echo off
rem Copyright 1999-2018 Alibaba Group Holding Ltd.
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem      http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.
if not exist "%JAVA_HOME%\bin\java.exe" echo Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! & EXIT /B 1
set "JAVA=%JAVA_HOME%\bin\java.exe"
setlocal enabledelayedexpansion
set BASE_DIR=%~dp0
rem added double quotation marks to avoid the issue caused by the folder names containing spaces.
rem removed the last 5 chars(which means \bin\) to get the base DIR.
set BASE_DIR="%BASE_DIR:~0,-5%"
set CUSTOM_SEARCH_LOCATIONS=file:%BASE_DIR%/conf/
set MODE="cluster"
set FUNCTION_MODE="all"
set SERVER=nacos-server
set MODE_INDEX=-1
set FUNCTION_MODE_INDEX=-1
set SERVER_INDEX=-1
set EMBEDDED_STORAGE_INDEX=-1
set EMBEDDED_STORAGE=""
set i=0
for %%a in (%*) do (
    if "%%a" == "-m" ( set /a MODE_INDEX=!i!+1 )
    if "%%a" == "-f" ( set /a FUNCTION_MODE_INDEX=!i!+1 )
    if "%%a" == "-s" ( set /a SERVER_INDEX=!i!+1 )
    if "%%a" == "-p" ( set /a EMBEDDED_STORAGE_INDEX=!i!+1 )
    set /a i+=1
)
set i=0
for %%a in (%*) do (
    if %MODE_INDEX% == !i! ( set MODE="%%a" )
    if %FUNCTION_MODE_INDEX% == !i! ( set FUNCTION_MODE="%%a" )
    if %SERVER_INDEX% == !i! (set SERVER="%%a")
    if %EMBEDDED_STORAGE_INDEX% == !i! (set EMBEDDED_STORAGE="%%a")
    set /a i+=1
)
rem if nacos startup mode is standalone
if %MODE% == "standalone" (
    echo "nacos is starting with standalone"
      set "NACOS_OPTS=-Dnacos.standalone=true"
    set "NACOS_JVM_OPTS=-Xms512m -Xmx512m -Xmn256m"
)
rem if nacos startup mode is cluster
if %MODE% == "cluster" (
    echo "nacos is starting with cluster"
      if %EMBEDDED_STORAGE% == "embedded" (
          set "NACOS_OPTS=-DembeddedStorage=true"
      )
    set "NACOS_JVM_OPTS=-server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages"
)
rem set nacos's functionMode
if %FUNCTION_MODE% == "config" (
    set "NACOS_OPTS=%NACOS_OPTS% -Dnacos.functionMode=config"
)
if %FUNCTION_MODE% == "naming" (
    set "NACOS_OPTS=%NACOS_OPTS% -Dnacos.functionMode=naming"
)
rem set nacos options
set "NACOS_OPTS=%NACOS_OPTS% -Dloader.path=%BASE_DIR%/plugins/health,%BASE_DIR%/plugins/cmdb,%BASE_DIR%/plugins/selector"
set "NACOS_OPTS=%NACOS_OPTS% -Dnacos.home=%BASE_DIR%"
set "NACOS_OPTS=%NACOS_OPTS% -jar %BASE_DIR%\target\%SERVER%.jar"
rem set nacos spring config location
set "NACOS_CONFIG_OPTS=--spring.config.additional-location=%CUSTOM_SEARCH_LOCATIONS%"
rem set nacos log4j file location
set "NACOS_LOG4J_OPTS=--logging.config=%BASE_DIR%/conf/nacos-logback.xml"
set COMMAND="%JAVA%" %NACOS_JVM_OPTS% %NACOS_OPTS% %NACOS_CONFIG_OPTS% %NACOS_LOG4J_OPTS% nacos.nacos %*
rem start nacos command
%COMMAND%
nacos/bin/startup.sh
New file
@@ -0,0 +1,148 @@
#!/bin/bash
# Copyright 1999-2018 Alibaba Group Holding Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
cygwin=false
darwin=false
os400=false
case "`uname`" in
CYGWIN*) cygwin=true;;
Darwin*) darwin=true;;
OS400*) os400=true;;
esac
error_exit ()
{
    echo "ERROR: $1 !!"
    exit 1
}
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME
if [ -z "$JAVA_HOME" ]; then
  if $darwin; then
    if [ -x '/usr/libexec/java_home' ] ; then
      export JAVA_HOME=`/usr/libexec/java_home`
    elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then
      export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
    fi
  else
    JAVA_PATH=`dirname $(readlink -f $(which javac))`
    if [ "x$JAVA_PATH" != "x" ]; then
      export JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null`
    fi
  fi
  if [ -z "$JAVA_HOME" ]; then
        error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!"
  fi
fi
export SERVER="nacos-server"
export MODE="cluster"
export FUNCTION_MODE="all"
export MEMBER_LIST=""
export EMBEDDED_STORAGE=""
while getopts ":m:f:s:c:p:" opt
do
    case $opt in
        m)
            MODE=$OPTARG;;
        f)
            FUNCTION_MODE=$OPTARG;;
        s)
            SERVER=$OPTARG;;
        c)
            MEMBER_LIST=$OPTARG;;
        p)
            EMBEDDED_STORAGE=$OPTARG;;
        ?)
        echo "Unknown parameter"
        exit 1;;
    esac
done
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=`cd $(dirname $0)/..; pwd`
export CUSTOM_SEARCH_LOCATIONS=file:${BASE_DIR}/conf/
#===========================================================================================
# JVM Configuration
#===========================================================================================
if [[ "${MODE}" == "standalone" ]]; then
    JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
    JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
    if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
        JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
    fi
    JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
    JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
fi
if [[ "${FUNCTION_MODE}" == "config" ]]; then
    JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=config"
elif [[ "${FUNCTION_MODE}" == "naming" ]]; then
    JAVA_OPT="${JAVA_OPT} -Dnacos.functionMode=naming"
fi
JAVA_OPT="${JAVA_OPT} -Dnacos.member.list=${MEMBER_LIST}"
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')
if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then
  JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400"
else
  JAVA_OPT_EXT_FIX="-Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"
  JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
fi
JAVA_OPT="${JAVA_OPT} -Dloader.path=${BASE_DIR}/plugins/health,${BASE_DIR}/plugins/cmdb,${BASE_DIR}/plugins/selector"
JAVA_OPT="${JAVA_OPT} -Dnacos.home=${BASE_DIR}"
JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/target/${SERVER}.jar"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} --spring.config.additional-location=${CUSTOM_SEARCH_LOCATIONS}"
JAVA_OPT="${JAVA_OPT} --logging.config=${BASE_DIR}/conf/nacos-logback.xml"
JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288"
if [ ! -d "${BASE_DIR}/logs" ]; then
  mkdir ${BASE_DIR}/logs
fi
echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}"
if [[ "${MODE}" == "standalone" ]]; then
    echo "nacos is starting with standalone"
else
    echo "nacos is starting with cluster"
fi
# check the start.out log output file
if [ ! -f "${BASE_DIR}/logs/start.out" ]; then
  touch "${BASE_DIR}/logs/start.out"
fi
# start
echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &
if [[ "$JAVA_OPT_EXT_FIX" == "" ]]; then
  nohup "$JAVA" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
else
  nohup "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
fi
echo "nacos is starting,you can check the ${BASE_DIR}/logs/start.out"
nacos/conf/1.4.0-ipv6_support-update.sql
New file
@@ -0,0 +1,27 @@
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
ALTER TABLE `config_info_tag`
MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`;
ALTER TABLE `his_config_info`
MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL AFTER `src_user`;
ALTER TABLE `config_info`
MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`;
ALTER TABLE `config_info_beta`
MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`;
nacos/conf/application.properties
New file
@@ -0,0 +1,238 @@
#
# Copyright 1999-2021 Alibaba Group Holding Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### Include message field
server.error.include-message=ON_PARAM
### Default web server port:
server.port=8848
#*************** Network Related Configurations ***************#
### If prefer hostname over ip for Nacos server addresses in cluster.conf:
# nacos.inetutils.prefer-hostname-over-ip=false
### Specify local server's IP:
# nacos.inetutils.ip-address=
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
# spring.datasource.platform=mysql
### Count of DB:
# db.num=1
### Connect URL of DB:
# db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
# db.user.0=nacos
# db.password.0=nacos
### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
#*************** Naming Module Related Configurations ***************#
### Data dispatch task execution period in milliseconds: Will removed on v2.1.X, replace with nacos.core.protocol.distro.data.sync.delayMs
# nacos.naming.distro.taskDispatchPeriod=200
### Data count of batch sync task: Will removed on v2.1.X. Deprecated
# nacos.naming.distro.batchSyncKeyCount=1000
### Retry delay in milliseconds if sync task failed: Will removed on v2.1.X, replace with nacos.core.protocol.distro.data.sync.retryDelayMs
# nacos.naming.distro.syncRetryDelay=5000
### If enable data warmup. If set to false, the server would accept request without local data preparation:
# nacos.naming.data.warmup=true
### If enable the instance auto expiration, kind like of health check of instance:
# nacos.naming.expireInstance=true
### will be removed and replaced by `nacos.naming.clean` properties
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
### Add in 2.0.0
### The interval to clean empty service, unit: milliseconds.
# nacos.naming.clean.empty-service.interval=60000
### The expired time to clean empty service, unit: milliseconds.
# nacos.naming.clean.empty-service.expired-time=60000
### The interval to clean expired metadata, unit: milliseconds.
# nacos.naming.clean.expired-metadata.interval=5000
### The expired time to clean metadata, unit: milliseconds.
# nacos.naming.clean.expired-metadata.expired-time=60000
### The delay time before push task to execute from service changed, unit: milliseconds.
# nacos.naming.push.pushTaskDelay=500
### The timeout for push task execute, unit: milliseconds.
# nacos.naming.push.pushTaskTimeout=5000
### The delay time for retrying failed push task, unit: milliseconds.
# nacos.naming.push.pushTaskRetryDelay=1000
### Since 2.0.3
### The expired time for inactive client, unit: milliseconds.
# nacos.naming.client.expired.time=180000
#*************** CMDB Module Related Configurations ***************#
### The interval to dump external CMDB in seconds:
# nacos.cmdb.dumpTaskInterval=3600
### The interval of polling data change event in seconds:
# nacos.cmdb.eventTaskInterval=10
### The interval of loading labels in seconds:
# nacos.cmdb.labelTaskInterval=300
### If turn on data loading task:
# nacos.cmdb.loadDataAtStart=false
#*************** Metrics Related Configurations ***************#
### Metrics for prometheus
#management.endpoints.web.exposure.include=*
### Metrics for elastic search
management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200
### Metrics for influx
management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true
#*************** Access Log Related Configurations ***************#
### If turn on the access log:
server.tomcat.accesslog.enabled=true
### The access log pattern:
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
### The directory of access log:
server.tomcat.basedir=file:.
#*************** Access Control Related Configurations ***************#
### If enable spring security, this option is deprecated in 1.2.0:
#spring.security.enabled=false
### The ignore urls of auth, is deprecated in 1.2.0:
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=nacos
### If turn on auth system:
nacos.core.auth.enabled=false
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=true
### Since 1.4.1, Turn on/off white auth for user-agent: nacos-server, only for upgrade from old version.
nacos.core.auth.enable.userAgentAuthWhite=false
### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
### The two properties is the white list for auth and used by identity the request from other server.
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username
#nacos.core.auth.ldap.url=ldap://localhost:389
#nacos.core.auth.ldap.basedc=dc=example,dc=org
#nacos.core.auth.ldap.userDn=cn=admin,${nacos.core.auth.ldap.basedc}
#nacos.core.auth.ldap.password=admin
#nacos.core.auth.ldap.userdn=cn={0},dc=example,dc=org
#*************** Istio Related Configurations ***************#
### If turn on the MCP server:
nacos.istio.mcp.server.enabled=false
#*************** Core Related Configurations ***************#
### set the WorkerID manually
# nacos.core.snowflake.worker-id=
### Member-MetaData
# nacos.core.member.meta.site=
# nacos.core.member.meta.adweight=
# nacos.core.member.meta.weight=
### MemberLookup
### Addressing pattern category, If set, the priority is highest
# nacos.core.member.lookup.type=[file,address-server]
## Set the cluster list with a configuration file or command-line argument
# nacos.member.list=192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809
## for AddressServerMemberLookup
# Maximum number of retries to query the address server upon initialization
# nacos.core.address-server.retry=5
## Server domain name address of [address-server] mode
# address.server.domain=jmenv.tbsite.net
## Server port of [address-server] mode
# address.server.port=8080
## Request address of [address-server] mode
# address.server.url=/nacos/serverlist
#*************** JRaft Related Configurations ***************#
### Sets the Raft cluster election timeout, default value is 5 second
# nacos.core.protocol.raft.data.election_timeout_ms=5000
### Sets the amount of time the Raft snapshot will execute periodically, default is 30 minute
# nacos.core.protocol.raft.data.snapshot_interval_secs=30
### raft internal worker threads
# nacos.core.protocol.raft.data.core_thread_num=8
### Number of threads required for raft business request processing
# nacos.core.protocol.raft.data.cli_service_thread_num=4
### raft linear read strategy. Safe linear reads are used by default, that is, the Leader tenure is confirmed by heartbeat
# nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe
### rpc request timeout, default 5 seconds
# nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000
#*************** Distro Related Configurations ***************#
### Distro data sync delay time, when sync task delayed, task will be merged for same data key. Default 1 second.
# nacos.core.protocol.distro.data.sync.delayMs=1000
### Distro data sync timeout for one sync data, default 3 seconds.
# nacos.core.protocol.distro.data.sync.timeoutMs=3000
### Distro data sync retry delay time when sync data failed or timeout, same behavior with delayMs, default 3 seconds.
# nacos.core.protocol.distro.data.sync.retryDelayMs=3000
### Distro data verify interval time, verify synced data whether expired for a interval. Default 5 seconds.
# nacos.core.protocol.distro.data.verify.intervalMs=5000
### Distro data verify timeout for one verify, default 3 seconds.
# nacos.core.protocol.distro.data.verify.timeoutMs=3000
### Distro data load retry delay when load snapshot data failed, default 30 seconds.
# nacos.core.protocol.distro.data.load.retryDelayMs=30000
nacos/conf/application.properties.example
New file
@@ -0,0 +1,239 @@
#
# Copyright 1999-2021 Alibaba Group Holding Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### Include message field
server.error.include-message=ON_PARAM
### Default web server port:
server.port=8848
#*************** Network Related Configurations ***************#
### If prefer hostname over ip for Nacos server addresses in cluster.conf:
# nacos.inetutils.prefer-hostname-over-ip=false
### Specify local server's IP:
# nacos.inetutils.ip-address=
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
# spring.datasource.platform=mysql
### Count of DB:
# db.num=1
### Connect URL of DB:
# db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
# db.user.0=nacos
# db.password.0=nacos
### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
#*************** Naming Module Related Configurations ***************#
### Data dispatch task execution period in milliseconds: Will removed on v2.1.X, replace with nacos.core.protocol.distro.data.sync.delayMs
# nacos.naming.distro.taskDispatchPeriod=200
### Data count of batch sync task: Will removed on v2.1.X. Deprecated
# nacos.naming.distro.batchSyncKeyCount=1000
### Retry delay in milliseconds if sync task failed: Will removed on v2.1.X, replace with nacos.core.protocol.distro.data.sync.retryDelayMs
# nacos.naming.distro.syncRetryDelay=5000
### If enable data warmup. If set to false, the server would accept request without local data preparation:
# nacos.naming.data.warmup=true
### If enable the instance auto expiration, kind like of health check of instance:
# nacos.naming.expireInstance=true
### will be removed and replaced by `nacos.naming.clean` properties
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
### Add in 2.0.0
### The interval to clean empty service, unit: milliseconds.
# nacos.naming.clean.empty-service.interval=60000
### The expired time to clean empty service, unit: milliseconds.
# nacos.naming.clean.empty-service.expired-time=60000
### The interval to clean expired metadata, unit: milliseconds.
# nacos.naming.clean.expired-metadata.interval=5000
### The expired time to clean metadata, unit: milliseconds.
# nacos.naming.clean.expired-metadata.expired-time=60000
### The delay time before push task to execute from service changed, unit: milliseconds.
# nacos.naming.push.pushTaskDelay=500
### The timeout for push task execute, unit: milliseconds.
# nacos.naming.push.pushTaskTimeout=5000
### The delay time for retrying failed push task, unit: milliseconds.
# nacos.naming.push.pushTaskRetryDelay=1000
### Since 2.0.3
### The expired time for inactive client, unit: milliseconds.
# nacos.naming.client.expired.time=180000
#*************** CMDB Module Related Configurations ***************#
### The interval to dump external CMDB in seconds:
# nacos.cmdb.dumpTaskInterval=3600
### The interval of polling data change event in seconds:
# nacos.cmdb.eventTaskInterval=10
### The interval of loading labels in seconds:
# nacos.cmdb.labelTaskInterval=300
### If turn on data loading task:
# nacos.cmdb.loadDataAtStart=false
#*************** Metrics Related Configurations ***************#
### Metrics for prometheus
#management.endpoints.web.exposure.include=*
### Metrics for elastic search
management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200
### Metrics for influx
management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true
#*************** Access Log Related Configurations ***************#
### If turn on the access log:
server.tomcat.accesslog.enabled=true
### The access log pattern:
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
### The directory of access log:
server.tomcat.basedir=file:.
#*************** Access Control Related Configurations ***************#
### If enable spring security, this option is deprecated in 1.2.0:
#spring.security.enabled=false
### The ignore urls of auth, is deprecated in 1.2.0:
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=nacos
### If turn on auth system:
nacos.core.auth.enabled=false
### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username
#nacos.core.auth.system.type=ldap
#nacos.core.auth.ldap.url=ldap://localhost:389
#nacos.core.auth.ldap.basedc=dc=example,dc=org
#nacos.core.auth.ldap.userDn=cn=admin,${nacos.core.auth.ldap.basedc}
#nacos.core.auth.ldap.password=admin
#nacos.core.auth.ldap.userdn=cn={0},dc=example,dc=org
### The token expiration in seconds:
nacos.core.auth.default.token.expire.seconds=18000
### The default token:
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=true
### Since 1.4.1, Turn on/off white auth for user-agent: nacos-server, only for upgrade from old version.
nacos.core.auth.enable.userAgentAuthWhite=false
### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
### The two properties is the white list for auth and used by identity the request from other server.
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
#*************** Istio Related Configurations ***************#
### If turn on the MCP server:
nacos.istio.mcp.server.enabled=false
#*************** Core Related Configurations ***************#
### set the WorkerID manually
# nacos.core.snowflake.worker-id=
### Member-MetaData
# nacos.core.member.meta.site=
# nacos.core.member.meta.adweight=
# nacos.core.member.meta.weight=
### MemberLookup
### Addressing pattern category, If set, the priority is highest
# nacos.core.member.lookup.type=[file,address-server]
## Set the cluster list with a configuration file or command-line argument
# nacos.member.list=192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809
## for AddressServerMemberLookup
# Maximum number of retries to query the address server upon initialization
# nacos.core.address-server.retry=5
## Server domain name address of [address-server] mode
# address.server.domain=jmenv.tbsite.net
## Server port of [address-server] mode
# address.server.port=8080
## Request address of [address-server] mode
# address.server.url=/nacos/serverlist
#*************** JRaft Related Configurations ***************#
### Sets the Raft cluster election timeout, default value is 5 second
# nacos.core.protocol.raft.data.election_timeout_ms=5000
### Sets the amount of time the Raft snapshot will execute periodically, default is 30 minute
# nacos.core.protocol.raft.data.snapshot_interval_secs=30
### raft internal worker threads
# nacos.core.protocol.raft.data.core_thread_num=8
### Number of threads required for raft business request processing
# nacos.core.protocol.raft.data.cli_service_thread_num=4
### raft linear read strategy. Safe linear reads are used by default, that is, the Leader tenure is confirmed by heartbeat
# nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe
### rpc request timeout, default 5 seconds
# nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000
#*************** Distro Related Configurations ***************#
### Distro data sync delay time, when sync task delayed, task will be merged for same data key. Default 1 second.
# nacos.core.protocol.distro.data.sync.delayMs=1000
### Distro data sync timeout for one sync data, default 3 seconds.
# nacos.core.protocol.distro.data.sync.timeoutMs=3000
### Distro data sync retry delay time when sync data failed or timeout, same behavior with delayMs, default 3 seconds.
# nacos.core.protocol.distro.data.sync.retryDelayMs=3000
### Distro data verify interval time, verify synced data whether expired for a interval. Default 5 seconds.
# nacos.core.protocol.distro.data.verify.intervalMs=5000
### Distro data verify timeout for one verify, default 3 seconds.
# nacos.core.protocol.distro.data.verify.timeoutMs=3000
### Distro data load retry delay when load snapshot data failed, default 30 seconds.
# nacos.core.protocol.distro.data.load.retryDelayMs=30000
nacos/conf/cluster.conf.example
New file
@@ -0,0 +1,21 @@
#
# Copyright 1999-2021 Alibaba Group Holding Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#it is ip
#example
192.168.16.101:8847
192.168.16.102
192.168.16.103
nacos/conf/nacos-logback.xml
New file
@@ -0,0 +1,778 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 1999-2018 Alibaba Group Holding Ltd.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<configuration scan="true" scanPeriod="10 seconds">
    <springProperty scope="context" name="logPath" source="nacos.logs.path" defaultValue="${nacos.home}/logs"/>
    <property name="LOG_HOME" value="${logPath}"/>
    <appender name="cmdb-main"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${nacos.home}/logs/cmdb-main.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${nacos.home}/logs/cmdb-main.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="naming-server"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/naming-server.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/naming-server.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="async-naming-server" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="naming-server"/>
    </appender>
    <appender name="naming-raft"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/naming-raft.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/naming-raft.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="async-naming-raft" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="naming-raft"/>
    </appender>
    <appender name="naming-distro"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/naming-distro.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/naming-distro.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="async-naming-distro" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="naming-distro"/>
    </appender>
    <appender name="naming-event"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/naming-event.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/naming-event.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="async-naming-event" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="naming-event"/>
    </appender>
    <appender name="naming-push"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/naming-push.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/naming-push.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="naming-rt"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/naming-rt.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/naming-rt.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%msg%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="naming-performance"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/naming-performance.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/naming-performance.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--config module logback config-->
    <appender name="dumpFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/config-dump.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/config-dump.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="pullFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/config-pull.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/config-pull.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>20MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>128MB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="fatalFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/config-fatal.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/config-fatal.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>20MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>128MB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="memoryFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/config-memory.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/config-memory.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>20MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>128MB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="pullCheckFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/config-pull-check.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/config-pull-check.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%msg%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="clientLog"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/config-client-request.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/config-client-request.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date|%msg%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="traceLog"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/config-trace.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/config-trace.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date|%msg%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="notifyLog"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/config-notify.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/config-notify.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="startLog"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/config-server.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/config-server.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>512MB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="rootFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/nacos.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/nacos.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>512MB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="nacos-address"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/nacos-address.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/nacos-address.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="istio-main"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/istio-main.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/istio-main.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="core-auth"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/core-auth.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/core-auth.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="protocol-raft"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/protocol-raft.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/protocol-raft.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="protocol-distro"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/protocol-distro.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/protocol-distro.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="nacos-cluster"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/nacos-cluster.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/nacos-cluster.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="alipay-jraft"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/alipay-jraft.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/alipay-jraft.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--TPS control -->
    <appender name="tps-control"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/tps-control.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/tps-control.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="tps-control-digest"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/tps-control-digest.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/tps-control-digest.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="tps-control-detail"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/tps-control-detail.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/tps-control-detail.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="remote"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/remote.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/remote.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="remote-digest"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/remote-digest.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/remote-digest.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <appender name="remote-push"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/remote-push.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/remote-push.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <logger name="com.alibaba.nacos.address.main" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="nacos-address"/>
    </logger>
    <logger name="com.alibaba.nacos.cmdb.main" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="cmdb-main"/>
    </logger>
    <logger name="com.alibaba.nacos.core.remote" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="remote"/>
    </logger>
    <logger name="com.alibaba.nacos.core.remote.push" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="remote-push"/>
    </logger>
    <logger name="com.alibaba.nacos.core.remote.digest" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="remote-digest"/>
    </logger>
    <!-- TPS Control-->
    <logger name="com.alibaba.nacos.core.remote.control.digest" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="tps-control-digest"/>
    </logger>
    <logger name="com.alibaba.nacos.core.remote.control.detail" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="tps-control-detail"/>
    </logger>
    <logger name="com.alibaba.nacos.core.remote.control" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="tps-control"/>
    </logger>
    <logger name="com.alibaba.nacos.naming.main" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="async-naming-server"/>
    </logger>
    <logger name="com.alibaba.nacos.naming.raft" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="async-naming-raft"/>
    </logger>
    <logger name="com.alibaba.nacos.naming.distro" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="async-naming-distro"/>
    </logger>
    <logger name="com.alibaba.nacos.naming.event" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="async-naming-event"/>
    </logger>
    <logger name="com.alibaba.nacos.naming.push" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="naming-push"/>
    </logger>
    <logger name="com.alibaba.nacos.naming.rt" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="naming-rt"/>
    </logger>
    <logger name="com.alibaba.nacos.naming.performance" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="naming-performance"/>
    </logger>
    <logger name="com.alibaba.nacos.config.dumpLog" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="dumpFile"/>
    </logger>
    <logger name="com.alibaba.nacos.config.pullLog" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="pullFile"/>
    </logger>
    <logger name="com.alibaba.nacos.config.pullCheckLog" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="pullCheckFile"/>
    </logger>
    <logger name="com.alibaba.nacos.config.fatal" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="fatalFile"/>
    </logger>
    <logger name="com.alibaba.nacos.config.monitorLog" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="memoryFile"/>
    </logger>
    <logger name="com.alibaba.nacos.config.clientLog" additivity="false">
        <level value="info"/>
        <appender-ref ref="clientLog"/>
    </logger>
    <logger name="com.alibaba.nacos.config.notifyLog" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="notifyLog"/>
    </logger>
    <logger name="com.alibaba.nacos.config.traceLog" additivity="false">
        <level value="info"/>
        <appender-ref ref="traceLog"/>
    </logger>
    <logger name="com.alibaba.nacos.config.startLog" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="startLog"/>
    </logger>
    <logger name="com.alibaba.nacos.istio.main" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="istio-main"/>
    </logger>
    <logger name="com.alibaba.nacos.core.auth" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="core-auth"/>
    </logger>
    <logger name="com.alibaba.nacos.core.protocol.raft" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="protocol-raft"/>
    </logger>
    <logger name="com.alipay.sofa.jraft" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="alipay-jraft"/>
    </logger>
    <logger name="com.alibaba.nacos.core.protocol.distro" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="protocol-distro"/>
    </logger>
    <logger name="com.alibaba.nacos.core.cluster" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="nacos-cluster"/>
    </logger>
    <springProfile name="standalone">
        <logger name="org.springframework">
            <appender-ref ref="CONSOLE"/>
            <level value="INFO"/>
        </logger>
        <logger name="org.apache.catalina.startup.DigesterFactory">
            <appender-ref ref="CONSOLE"/>
            <level value="INFO"/>
        </logger>
        <logger name="org.apache.catalina.util.LifecycleBase">
            <appender-ref ref="CONSOLE"/>
            <level value="ERROR"/>
        </logger>
        <logger name="org.apache.coyote.http11.Http11NioProtocol">
            <appender-ref ref="CONSOLE"/>
            <level value="WARN"/>
        </logger>
        <logger name="org.apache.tomcat.util.net.NioSelectorPool">
            <appender-ref ref="CONSOLE"/>
            <level value="WARN"/>
        </logger>
    </springProfile>
    <logger name="com.alibaba.nacos.core.listener.StartingApplicationListener">
        <appender-ref ref="CONSOLE"/>
        <level value="INFO"/>
    </logger>
    <logger name="com.alibaba.nacos.common.notify.NotifyCenter">
        <appender-ref ref="CONSOLE"/>
        <level value="INFO"/>
    </logger>
    <logger name="com.alibaba.nacos.sys.file.WatchFileCenter">
        <appender-ref ref="CONSOLE"/>
        <level value="INFO"/>
    </logger>
    <logger name="com.alibaba.nacos.common.executor.ThreadPoolManager">
        <appender-ref ref="CONSOLE"/>
        <level value="INFO"/>
    </logger>
    <root>
        <level value="INFO"/>
        <appender-ref ref="rootFile"/>
    </root>
</configuration>
nacos/conf/nacos-mysql.sql
New file
@@ -0,0 +1,221 @@
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(20) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `src_user` text,
  `src_ip` varchar(50) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '秘钥',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
CREATE TABLE `users` (
    `username` varchar(50) NOT NULL PRIMARY KEY,
    `password` varchar(500) NOT NULL,
    `enabled` boolean NOT NULL
);
CREATE TABLE `roles` (
    `username` varchar(50) NOT NULL,
    `role` varchar(50) NOT NULL,
    UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
CREATE TABLE `permissions` (
    `role` varchar(50) NOT NULL,
    `resource` varchar(255) NOT NULL,
    `action` varchar(8) NOT NULL,
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
nacos/conf/schema.sql
New file
@@ -0,0 +1,231 @@
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
CREATE SCHEMA nacos AUTHORIZATION nacos;
CREATE TABLE config_info (
  id bigint NOT NULL generated by default as identity,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  tenant_id varchar(128) default '',
  app_name varchar(128),
  content CLOB,
  md5 varchar(32) DEFAULT NULL,
  gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
  gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
  src_user varchar(128) DEFAULT NULL,
  src_ip varchar(50) DEFAULT NULL,
  c_desc varchar(256) DEFAULT NULL,
  c_use varchar(64) DEFAULT NULL,
  effect varchar(64) DEFAULT NULL,
  type varchar(64) DEFAULT NULL,
  c_schema LONG VARCHAR DEFAULT NULL,
  encrypted_data_key LONG VARCHAR DEFAULT NULL,
  constraint configinfo_id_key PRIMARY KEY (id),
  constraint uk_configinfo_datagrouptenant UNIQUE (data_id,group_id,tenant_id));
CREATE INDEX configinfo_dataid_key_idx ON config_info(data_id);
CREATE INDEX configinfo_groupid_key_idx ON config_info(group_id);
CREATE INDEX configinfo_dataid_group_key_idx ON config_info(data_id, group_id);
CREATE TABLE his_config_info (
  id bigint NOT NULL,
  nid bigint NOT NULL generated by default as identity,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  tenant_id varchar(128) default '',
  app_name varchar(128),
  content CLOB,
  md5 varchar(32) DEFAULT NULL,
  gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00.000',
  gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00.000',
  src_user varchar(128),
  src_ip varchar(50) DEFAULT NULL,
  op_type char(10) DEFAULT NULL,
  encrypted_data_key LONG VARCHAR DEFAULT NULL,
  constraint hisconfiginfo_nid_key PRIMARY KEY (nid));
CREATE INDEX hisconfiginfo_dataid_key_idx ON his_config_info(data_id);
CREATE INDEX hisconfiginfo_gmt_create_idx ON his_config_info(gmt_create);
CREATE INDEX hisconfiginfo_gmt_modified_idx ON his_config_info(gmt_modified);
CREATE TABLE config_info_beta (
  id bigint NOT NULL generated by default as identity,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  tenant_id varchar(128) default '',
  app_name varchar(128),
  content CLOB,
  beta_ips varchar(1024),
  md5 varchar(32) DEFAULT NULL,
  gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
  gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
  src_user varchar(128),
  src_ip varchar(50) DEFAULT NULL,
  encrypted_data_key LONG VARCHAR DEFAULT NULL,
  constraint configinfobeta_id_key PRIMARY KEY (id),
  constraint uk_configinfobeta_datagrouptenant UNIQUE (data_id,group_id,tenant_id));
CREATE TABLE config_info_tag (
  id bigint NOT NULL generated by default as identity,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  tenant_id varchar(128) default '',
  tag_id varchar(128) NOT NULL,
  app_name varchar(128),
  content CLOB,
  md5 varchar(32) DEFAULT NULL,
  gmt_create timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
  gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
  src_user varchar(128),
  src_ip varchar(50) DEFAULT NULL,
  constraint configinfotag_id_key PRIMARY KEY (id),
  constraint uk_configinfotag_datagrouptenanttag UNIQUE (data_id,group_id,tenant_id,tag_id));
CREATE TABLE config_info_aggr (
  id bigint NOT NULL generated by default as identity,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  tenant_id varchar(128) default '',
  datum_id varchar(255) NOT NULL,
  app_name varchar(128),
  content CLOB,
  gmt_modified timestamp NOT NULL DEFAULT '2010-05-05 00:00:00',
  constraint configinfoaggr_id_key PRIMARY KEY (id),
  constraint uk_configinfoaggr_datagrouptenantdatum UNIQUE (data_id,group_id,tenant_id,datum_id));
CREATE TABLE app_list (
 id bigint NOT NULL generated by default as identity,
 app_name varchar(128) NOT NULL,
 is_dynamic_collect_disabled smallint DEFAULT 0,
 last_sub_info_collected_time timestamp DEFAULT '1970-01-01 08:00:00.0',
 sub_info_lock_owner varchar(128),
 sub_info_lock_time timestamp DEFAULT '1970-01-01 08:00:00.0',
 constraint applist_id_key PRIMARY KEY (id),
 constraint uk_appname UNIQUE (app_name));
CREATE TABLE app_configdata_relation_subs (
  id bigint NOT NULL generated by default as identity,
  app_name varchar(128) NOT NULL,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  gmt_modified timestamp DEFAULT '2010-05-05 00:00:00',
  constraint configdatarelationsubs_id_key PRIMARY KEY (id),
  constraint uk_app_sub_config_datagroup UNIQUE (app_name, data_id, group_id));
CREATE TABLE app_configdata_relation_pubs (
  id bigint NOT NULL generated by default as identity,
  app_name varchar(128) NOT NULL,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  gmt_modified timestamp DEFAULT '2010-05-05 00:00:00',
  constraint configdatarelationpubs_id_key PRIMARY KEY (id),
  constraint uk_app_pub_config_datagroup UNIQUE (app_name, data_id, group_id));
CREATE TABLE config_tags_relation (
  id bigint NOT NULL,
  tag_name varchar(128) NOT NULL,
  tag_type varchar(64) DEFAULT NULL,
  data_id varchar(255) NOT NULL,
  group_id varchar(128) NOT NULL,
  tenant_id varchar(128) DEFAULT '',
  nid bigint NOT NULL generated by default as identity,
  constraint config_tags_id_key PRIMARY KEY (nid),
  constraint uk_configtagrelation_configidtag UNIQUE (id, tag_name, tag_type));
CREATE INDEX config_tags_tenant_id_idx ON config_tags_relation(tenant_id);
CREATE TABLE group_capacity (
  id bigint NOT NULL generated by default as identity,
  group_id varchar(128) DEFAULT '',
  quota int DEFAULT 0,
  usage int DEFAULT 0,
  max_size int DEFAULT 0,
  max_aggr_count int DEFAULT 0,
  max_aggr_size int DEFAULT 0,
  max_history_count int DEFAULT 0,
  gmt_create timestamp DEFAULT '2010-05-05 00:00:00',
  gmt_modified timestamp DEFAULT '2010-05-05 00:00:00',
  constraint group_capacity_id_key PRIMARY KEY (id),
  constraint uk_group_id UNIQUE (group_id));
CREATE TABLE tenant_capacity (
  id bigint NOT NULL generated by default as identity,
  tenant_id varchar(128) DEFAULT '',
  quota int DEFAULT 0,
  usage int DEFAULT 0,
  max_size int DEFAULT 0,
  max_aggr_count int DEFAULT 0,
  max_aggr_size int DEFAULT 0,
  max_history_count int DEFAULT 0,
  gmt_create timestamp DEFAULT '2010-05-05 00:00:00',
  gmt_modified timestamp DEFAULT '2010-05-05 00:00:00',
  constraint tenant_capacity_id_key PRIMARY KEY (id),
  constraint uk_tenant_id UNIQUE (tenant_id));
CREATE TABLE tenant_info (
  id bigint NOT NULL generated by default as identity,
  kp varchar(128) NOT NULL,
  tenant_id varchar(128)  DEFAULT '',
  tenant_name varchar(128)  DEFAULT '',
  tenant_desc varchar(256)  DEFAULT NULL,
  create_source varchar(32) DEFAULT NULL,
  gmt_create bigint NOT NULL,
  gmt_modified bigint NOT NULL,
  constraint tenant_info_id_key PRIMARY KEY (id),
  constraint uk_tenant_info_kptenantid UNIQUE (kp,tenant_id));
CREATE INDEX tenant_info_tenant_id_idx ON tenant_info(tenant_id);
CREATE TABLE users (
    username varchar(50) NOT NULL PRIMARY KEY,
    password varchar(500) NOT NULL,
    enabled boolean NOT NULL DEFAULT true
);
CREATE TABLE roles (
    username varchar(50) NOT NULL,
    role varchar(50) NOT NULL,
    constraint uk_username_role UNIQUE (username,role)
);
CREATE TABLE permissions (
    role varchar(50) NOT NULL,
    resource varchar(512) NOT NULL,
    action varchar(8) NOT NULL,
    constraint uk_role_permission UNIQUE (role,resource,action)
);
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
/******************************************/
/*   ipv6 support   */
/******************************************/
ALTER TABLE `config_info_tag`
MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`;
ALTER TABLE `his_config_info`
MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL AFTER `src_user`;
ALTER TABLE `config_info`
MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`;
ALTER TABLE `config_info_beta`
MODIFY COLUMN `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip' AFTER `src_user`;
nacos/data/derby-data/README_DO_NOT_TOUCH_FILES.txt
New file
@@ -0,0 +1,9 @@
# *************************************************************************
# ***              DO NOT TOUCH FILES IN THIS DIRECTORY!                ***
# *** FILES IN THIS DIRECTORY AND SUBDIRECTORIES CONSTITUTE A DERBY     ***
# *** DATABASE, WHICH INCLUDES THE DATA (USER AND SYSTEM) AND THE       ***
# *** FILES NECESSARY FOR DATABASE RECOVERY.                            ***
# *** EDITING, ADDING, OR DELETING ANY OF THESE FILES MAY CAUSE DATA    ***
# *** CORRUPTION AND LEAVE THE DATABASE IN A NON-RECOVERABLE STATE.     ***
# *************************************************************************
nacos/data/derby-data/db.lck
Binary files differ
nacos/data/derby-data/log/README_DO_NOT_TOUCH_FILES.txt
New file
@@ -0,0 +1,8 @@
# *************************************************************************
# ***              DO NOT TOUCH FILES IN THIS DIRECTORY!                ***
# *** FILES IN THIS DIRECTORY ARE USED BY THE DERBY DATABASE RECOVERY   ***
# *** SYSTEM. EDITING, ADDING, OR DELETING FILES IN THIS DIRECTORY      ***
# *** WILL CAUSE THE DERBY RECOVERY SYSTEM TO FAIL, LEADING TO          ***
# *** NON-RECOVERABLE CORRUPT DATABASES.                                ***
# *************************************************************************
nacos/data/derby-data/log/log.ctrl
Binary files differ
nacos/data/derby-data/log/log1.dat
Binary files differ
nacos/data/derby-data/log/logmirror.ctrl
Binary files differ
nacos/data/derby-data/seg0/README_DO_NOT_TOUCH_FILES.txt
New file
@@ -0,0 +1,8 @@
# *************************************************************************
# ***              DO NOT TOUCH FILES IN THIS DIRECTORY!                ***
# *** FILES IN THIS DIRECTORY ARE USED BY THE DERBY DATABASE TO STORE   ***
# *** USER AND SYSTEM DATA. EDITING, ADDING, OR DELETING FILES IN THIS  ***
# *** DIRECTORY WILL CORRUPT THE ASSOCIATED DERBY DATABASE AND MAKE     ***
# *** IT NON-RECOVERABLE.                                               ***
# *************************************************************************
nacos/data/derby-data/seg0/c10.dat
Binary files differ
nacos/data/derby-data/seg0/c101.dat
Binary files differ
nacos/data/derby-data/seg0/c111.dat
Binary files differ
nacos/data/derby-data/seg0/c121.dat
Binary files differ
nacos/data/derby-data/seg0/c130.dat
Binary files differ
nacos/data/derby-data/seg0/c141.dat
Binary files differ
nacos/data/derby-data/seg0/c150.dat
Binary files differ
nacos/data/derby-data/seg0/c161.dat
Binary files differ
nacos/data/derby-data/seg0/c171.dat
Binary files differ
nacos/data/derby-data/seg0/c180.dat
Binary files differ
nacos/data/derby-data/seg0/c191.dat
Binary files differ
nacos/data/derby-data/seg0/c1a1.dat
Binary files differ
nacos/data/derby-data/seg0/c1b1.dat
Binary files differ
nacos/data/derby-data/seg0/c1c0.dat
Binary files differ
nacos/data/derby-data/seg0/c1d1.dat
Binary files differ
nacos/data/derby-data/seg0/c1e0.dat
Binary files differ
nacos/data/derby-data/seg0/c1f1.dat
Binary files differ
nacos/data/derby-data/seg0/c20.dat
Binary files differ
nacos/data/derby-data/seg0/c200.dat
Binary files differ
nacos/data/derby-data/seg0/c211.dat
Binary files differ
nacos/data/derby-data/seg0/c221.dat
Binary files differ
nacos/data/derby-data/seg0/c230.dat
Binary files differ
nacos/data/derby-data/seg0/c241.dat
Binary files differ
nacos/data/derby-data/seg0/c251.dat
Binary files differ
nacos/data/derby-data/seg0/c260.dat
Binary files differ
nacos/data/derby-data/seg0/c271.dat
Binary files differ
nacos/data/derby-data/seg0/c281.dat
Binary files differ
nacos/data/derby-data/seg0/c290.dat
Binary files differ
nacos/data/derby-data/seg0/c2a1.dat
Binary files differ
nacos/data/derby-data/seg0/c2b1.dat
Binary files differ
nacos/data/derby-data/seg0/c2c1.dat
Binary files differ
nacos/data/derby-data/seg0/c2d0.dat
Binary files differ
nacos/data/derby-data/seg0/c2e1.dat
Binary files differ
nacos/data/derby-data/seg0/c2f0.dat
Binary files differ
nacos/data/derby-data/seg0/c300.dat
Binary files differ
nacos/data/derby-data/seg0/c31.dat
Binary files differ
nacos/data/derby-data/seg0/c311.dat
Binary files differ
nacos/data/derby-data/seg0/c321.dat
Binary files differ
nacos/data/derby-data/seg0/c331.dat
Binary files differ
nacos/data/derby-data/seg0/c340.dat
Binary files differ
nacos/data/derby-data/seg0/c351.dat
Binary files differ
nacos/data/derby-data/seg0/c361.dat
Binary files differ
nacos/data/derby-data/seg0/c371.dat
Binary files differ
nacos/data/derby-data/seg0/c380.dat
Binary files differ
nacos/data/derby-data/seg0/c391.dat
Binary files differ
nacos/data/derby-data/seg0/c3a1.dat
Binary files differ
nacos/data/derby-data/seg0/c3b1.dat
Binary files differ
nacos/data/derby-data/seg0/c3c0.dat
Binary files differ
nacos/data/derby-data/seg0/c3d1.dat
Binary files differ
nacos/data/derby-data/seg0/c3e1.dat
Binary files differ
nacos/data/derby-data/seg0/c3f1.dat
Binary files differ
nacos/data/derby-data/seg0/c400.dat
Binary files differ
nacos/data/derby-data/seg0/c41.dat
Binary files differ
nacos/data/derby-data/seg0/c411.dat
Binary files differ
nacos/data/derby-data/seg0/c421.dat
Binary files differ
nacos/data/derby-data/seg0/c430.dat
Binary files differ
nacos/data/derby-data/seg0/c441.dat
Binary files differ
nacos/data/derby-data/seg0/c451.dat
Binary files differ
nacos/data/derby-data/seg0/c461.dat
Binary files differ
nacos/data/derby-data/seg0/c470.dat
Binary files differ
nacos/data/derby-data/seg0/c481.dat
Binary files differ
nacos/data/derby-data/seg0/c490.dat
Binary files differ
nacos/data/derby-data/seg0/c4a1.dat
Binary files differ
nacos/data/derby-data/seg0/c4b1.dat
Binary files differ
nacos/data/derby-data/seg0/c4c1.dat
Binary files differ
nacos/data/derby-data/seg0/c4d1.dat
Binary files differ
nacos/data/derby-data/seg0/c4e1.dat
Binary files differ
nacos/data/derby-data/seg0/c4f0.dat
Binary files differ
nacos/data/derby-data/seg0/c501.dat
Binary files differ
nacos/data/derby-data/seg0/c51.dat
Binary files differ
nacos/data/derby-data/seg0/c511.dat
Binary files differ
nacos/data/derby-data/seg0/c521.dat
Binary files differ
nacos/data/derby-data/seg0/c531.dat
Binary files differ
nacos/data/derby-data/seg0/c540.dat
Binary files differ
nacos/data/derby-data/seg0/c551.dat
Binary files differ
nacos/data/derby-data/seg0/c561.dat
Binary files differ
nacos/data/derby-data/seg0/c570.dat
Binary files differ
nacos/data/derby-data/seg0/c581.dat
Binary files differ
nacos/data/derby-data/seg0/c591.dat
Binary files differ
nacos/data/derby-data/seg0/c5a0.dat
Binary files differ
nacos/data/derby-data/seg0/c5b1.dat
Binary files differ
nacos/data/derby-data/seg0/c5c1.dat
Binary files differ
nacos/data/derby-data/seg0/c5d0.dat
Binary files differ
nacos/data/derby-data/seg0/c5e1.dat
Binary files differ
nacos/data/derby-data/seg0/c5f1.dat
Binary files differ
nacos/data/derby-data/seg0/c60.dat
Binary files differ
nacos/data/derby-data/seg0/c600.dat
Binary files differ
nacos/data/derby-data/seg0/c611.dat
Binary files differ
nacos/data/derby-data/seg0/c621.dat
Binary files differ
nacos/data/derby-data/seg0/c630.dat
Binary files differ
nacos/data/derby-data/seg0/c641.dat
Binary files differ
nacos/data/derby-data/seg0/c651.dat
Binary files differ
nacos/data/derby-data/seg0/c660.dat
Binary files differ
nacos/data/derby-data/seg0/c671.dat
Binary files differ
nacos/data/derby-data/seg0/c681.dat
Binary files differ
nacos/data/derby-data/seg0/c691.dat
Binary files differ
nacos/data/derby-data/seg0/c6a0.dat
Binary files differ
nacos/data/derby-data/seg0/c6b1.dat
Binary files differ
nacos/data/derby-data/seg0/c6c1.dat
Binary files differ
nacos/data/derby-data/seg0/c6d0.dat
Binary files differ
nacos/data/derby-data/seg0/c6e1.dat
Binary files differ
nacos/data/derby-data/seg0/c6f1.dat
Binary files differ
nacos/data/derby-data/seg0/c700.dat
Binary files differ
nacos/data/derby-data/seg0/c71.dat
Binary files differ
nacos/data/derby-data/seg0/c711.dat
Binary files differ
nacos/data/derby-data/seg0/c721.dat
Binary files differ
nacos/data/derby-data/seg0/c731.dat
Binary files differ
nacos/data/derby-data/seg0/c740.dat
Binary files differ
nacos/data/derby-data/seg0/c751.dat
Binary files differ
nacos/data/derby-data/seg0/c760.dat
Binary files differ
nacos/data/derby-data/seg0/c771.dat
Binary files differ
nacos/data/derby-data/seg0/c780.dat
Binary files differ
nacos/data/derby-data/seg0/c791.dat
Binary files differ
nacos/data/derby-data/seg0/c81.dat
Binary files differ
nacos/data/derby-data/seg0/c90.dat
Binary files differ
nacos/data/derby-data/seg0/ca1.dat
Binary files differ
nacos/data/derby-data/seg0/cb1.dat
Binary files differ
nacos/data/derby-data/seg0/cc0.dat
Binary files differ
nacos/data/derby-data/seg0/cd1.dat
Binary files differ
nacos/data/derby-data/seg0/ce1.dat
Binary files differ
nacos/data/derby-data/seg0/cf0.dat
Binary files differ
nacos/data/derby-data/service.properties
New file
@@ -0,0 +1,23 @@
#E:\IDEA Workspaces\PlayPai\nacos\data\derby-data
# ********************************************************************
# ***                Please do NOT edit this file.                 ***
# *** CHANGING THE CONTENT OF THIS FILE MAY CAUSE DATA CORRUPTION. ***
# ********************************************************************
#Tue Jun 13 20:11:38 CST 2023
SysschemasIndex2Identifier=225
SyscolumnsIdentifier=144
SysconglomeratesIndex1Identifier=49
SysconglomeratesIdentifier=32
SyscolumnsIndex2Identifier=177
SysschemasIndex1Identifier=209
SysconglomeratesIndex3Identifier=81
SystablesIndex2Identifier=129
SyscolumnsIndex1Identifier=161
derby.serviceProtocol=org.apache.derby.database.Database
SysschemasIdentifier=192
derby.storage.propertiesId=16
SysconglomeratesIndex2Identifier=65
derby.serviceLocale=zh_CN
SystablesIdentifier=96
SystablesIndex1Identifier=113
#--- last line, don't put anything after this line ---
nacos/data/loader/limitRule
nacos/data/protocol/raft/naming_instance_metadata/log/000003.log
Binary files differ
nacos/data/protocol/raft/naming_instance_metadata/log/CURRENT
New file
@@ -0,0 +1 @@
MANIFEST-000004
nacos/data/protocol/raft/naming_instance_metadata/log/IDENTITY
New file
@@ -0,0 +1 @@
752c27f6-09e3-11ee-8227-04d4c44b1386
nacos/data/protocol/raft/naming_instance_metadata/log/LOCK
nacos/data/protocol/raft/naming_instance_metadata/log/LOG
New file
@@ -0,0 +1,1354 @@
2023/06/13-20:11:43.594809 b914 RocksDB version: 5.18.4
2023/06/13-20:11:43.594878 b914 Git sha rocksdb_build_git_sha:@b9a4a10659969c71e6f6eab4e4bae8c36ede919f@
2023/06/13-20:11:43.594892 b914 Compile date Mar 11 2020
2023/06/13-20:11:43.594900 b914 DB SUMMARY
2023/06/13-20:11:43.594955 b914 SST files in E:\IDEA Workspaces\PlayPai\nacos\data\protocol\raft\naming_instance_metadata\log dir, Total Num: 0, files:
2023/06/13-20:11:43.594968 b914 Write Ahead Log file in E:\IDEA Workspaces\PlayPai\nacos\data\protocol\raft\naming_instance_metadata\log:
2023/06/13-20:11:43.594977 b914                         Options.error_if_exists: 0
2023/06/13-20:11:43.594985 b914                       Options.create_if_missing: 1
2023/06/13-20:11:43.594993 b914                         Options.paranoid_checks: 1
2023/06/13-20:11:43.626950 b914                                     Options.env: 000000000063C590
2023/06/13-20:11:43.626962 b914                                Options.info_log: 000000002580AA30
2023/06/13-20:11:43.626966 b914                Options.max_file_opening_threads: 16
2023/06/13-20:11:43.626969 b914                              Options.statistics: 0000000000642520
2023/06/13-20:11:43.626973 b914                               Options.use_fsync: 0
2023/06/13-20:11:43.626976 b914                       Options.max_log_file_size: 0
2023/06/13-20:11:43.626979 b914                  Options.max_manifest_file_size: 1073741824
2023/06/13-20:11:43.626982 b914                   Options.log_file_time_to_roll: 0
2023/06/13-20:11:43.626985 b914                       Options.keep_log_file_num: 1000
2023/06/13-20:11:43.626989 b914                    Options.recycle_log_file_num: 0
2023/06/13-20:11:43.626993 b914                         Options.allow_fallocate: 1
2023/06/13-20:11:43.626996 b914                        Options.allow_mmap_reads: 0
2023/06/13-20:11:43.627000 b914                       Options.allow_mmap_writes: 0
2023/06/13-20:11:43.627003 b914                        Options.use_direct_reads: 0
2023/06/13-20:11:43.627006 b914                        Options.use_direct_io_for_flush_and_compaction: 0
2023/06/13-20:11:43.627009 b914          Options.create_missing_column_families: 1
2023/06/13-20:11:43.627012 b914                              Options.db_log_dir:
2023/06/13-20:11:43.627015 b914                                 Options.wal_dir: E:\IDEA Workspaces\PlayPai\nacos\data\protocol\raft\naming_instance_metadata\log
2023/06/13-20:11:43.627019 b914                Options.table_cache_numshardbits: 6
2023/06/13-20:11:43.627022 b914                      Options.max_subcompactions: 1
2023/06/13-20:11:43.627025 b914                  Options.max_background_flushes: 1
2023/06/13-20:11:43.627028 b914                         Options.WAL_ttl_seconds: 0
2023/06/13-20:11:43.627031 b914                       Options.WAL_size_limit_MB: 0
2023/06/13-20:11:43.627034 b914             Options.manifest_preallocation_size: 4194304
2023/06/13-20:11:43.627037 b914                     Options.is_fd_close_on_exec: 1
2023/06/13-20:11:43.627040 b914                   Options.advise_random_on_open: 1
2023/06/13-20:11:43.627043 b914                    Options.db_write_buffer_size: 0
2023/06/13-20:11:43.627046 b914                    Options.write_buffer_manager: 0000000000666050
2023/06/13-20:11:43.627050 b914         Options.access_hint_on_compaction_start: 1
2023/06/13-20:11:43.627053 b914  Options.new_table_reader_for_compaction_inputs: 0
2023/06/13-20:11:43.627056 b914           Options.random_access_max_buffer_size: 1048576
2023/06/13-20:11:43.627059 b914                      Options.use_adaptive_mutex: 0
2023/06/13-20:11:43.627062 b914                            Options.rate_limiter: 0000000000000000
2023/06/13-20:11:43.627066 b914     Options.sst_file_manager.rate_bytes_per_sec: 0
2023/06/13-20:11:43.627069 b914                       Options.wal_recovery_mode: 2
2023/06/13-20:11:43.627072 b914                  Options.enable_thread_tracking: 0
2023/06/13-20:11:43.627075 b914                  Options.enable_pipelined_write: 0
2023/06/13-20:11:43.627078 b914         Options.allow_concurrent_memtable_write: 1
2023/06/13-20:11:43.627109 b914      Options.enable_write_thread_adaptive_yield: 1
2023/06/13-20:11:43.627114 b914             Options.write_thread_max_yield_usec: 100
2023/06/13-20:11:43.627118 b914            Options.write_thread_slow_yield_usec: 3
2023/06/13-20:11:43.627121 b914                               Options.row_cache: None
2023/06/13-20:11:43.627124 b914                              Options.wal_filter: None
2023/06/13-20:11:43.627127 b914             Options.avoid_flush_during_recovery: 0
2023/06/13-20:11:43.627130 b914             Options.allow_ingest_behind: 0
2023/06/13-20:11:43.627133 b914             Options.preserve_deletes: 0
2023/06/13-20:11:43.627136 b914             Options.two_write_queues: 0
2023/06/13-20:11:43.627139 b914             Options.manual_wal_flush: 0
2023/06/13-20:11:43.627142 b914             Options.max_background_jobs: 2
2023/06/13-20:11:43.627145 b914             Options.max_background_compactions: 4
2023/06/13-20:11:43.627148 b914             Options.avoid_flush_during_shutdown: 0
2023/06/13-20:11:43.627151 b914           Options.writable_file_max_buffer_size: 1048576
2023/06/13-20:11:43.627155 b914             Options.delayed_write_rate : 16777216
2023/06/13-20:11:43.627158 b914             Options.max_total_wal_size: 0
2023/06/13-20:11:43.627161 b914             Options.delete_obsolete_files_period_micros: 21600000000
2023/06/13-20:11:43.627164 b914                   Options.stats_dump_period_sec: 600
2023/06/13-20:11:43.627167 b914                          Options.max_open_files: -1
2023/06/13-20:11:43.627170 b914                          Options.bytes_per_sync: 0
2023/06/13-20:11:43.627174 b914                      Options.wal_bytes_per_sync: 0
2023/06/13-20:11:43.627177 b914       Options.compaction_readahead_size: 0
2023/06/13-20:11:43.627180 b914 Compression algorithms supported:
2023/06/13-20:11:43.627183 b914     kZSTD supported: 1
2023/06/13-20:11:43.627187 b914     kSnappyCompression supported: 1
2023/06/13-20:11:43.627190 b914     kBZip2Compression supported: 0
2023/06/13-20:11:43.627194 b914     kZlibCompression supported: 1
2023/06/13-20:11:43.627197 b914     kLZ4Compression supported: 1
2023/06/13-20:11:43.627200 b914     kXpressCompression supported: 0
2023/06/13-20:11:43.627203 b914     kLZ4HCCompression supported: 1
2023/06/13-20:11:43.627206 b914     kZSTDNotFinalCompression supported: 1
2023/06/13-20:11:43.627211 b914 Fast CRC32 supported: Supported on x86
2023/06/13-20:11:43.627874 b914 [db\db_impl_open.cc:226] Creating manifest 1
2023/06/13-20:11:43.719972 b914 [db\version_set.cc:3508] Recovering from manifest file: MANIFEST-000001
2023/06/13-20:11:43.720047 b914 [db\column_family.cc:474] --------------- Options for column family [default]:
2023/06/13-20:11:43.720054 b914               Options.comparator: leveldb.BytewiseComparator
2023/06/13-20:11:43.720058 b914           Options.merge_operator: StringAppendOperator
2023/06/13-20:11:43.720061 b914        Options.compaction_filter: None
2023/06/13-20:11:43.720064 b914        Options.compaction_filter_factory: None
2023/06/13-20:11:43.720067 b914         Options.memtable_factory: SkipListFactory
2023/06/13-20:11:43.720071 b914            Options.table_factory: BlockBasedTable
2023/06/13-20:11:43.720095 b914            table_factory options:   flush_block_policy_factory: FlushBlockBySizePolicyFactory (00000000258ACBD0)
  cache_index_and_filter_blocks: 0
  cache_index_and_filter_blocks_with_high_priority: 1
  pin_l0_filter_and_index_blocks_in_cache: 1
  pin_top_level_index_and_filter: 1
  index_type: 2
  hash_index_allow_collision: 1
  checksum: 1
  no_block_cache: 0
  block_cache: 0000000000646BA0
  block_cache_name: LRUCache
  block_cache_options:
    capacity : 536870912
    num_shard_bits : 8
    strict_capacity_limit : 0
    memory_allocator : None
    high_pri_pool_ratio: 0.000
  block_cache_compressed: 0000000000000000
  persistent_cache: 0000000000000000
  block_size: 4096
  block_size_deviation: 10
  block_restart_interval: 16
  index_block_restart_interval: 1
  metadata_block_size: 8192
  partition_filters: 1
  use_delta_encoding: 1
  filter_policy: nullptr
  whole_key_filtering: 1
  verify_compression: 0
  read_amp_bytes_per_bit: 0
  format_version: 0
  enable_index_compression: 1
  block_align: 0
2023/06/13-20:11:43.720128 b914        Options.write_buffer_size: 67108864
2023/06/13-20:11:43.720133 b914  Options.max_write_buffer_number: 3
2023/06/13-20:11:43.720137 b914          Options.compression: Snappy
2023/06/13-20:11:43.720140 b914                  Options.bottommost_compression: Disabled
2023/06/13-20:11:43.720143 b914       Options.prefix_extractor: rocksdb.FixedPrefix.8
2023/06/13-20:11:43.720147 b914   Options.memtable_insert_with_hint_prefix_extractor: nullptr
2023/06/13-20:11:43.720150 b914             Options.num_levels: 7
2023/06/13-20:11:43.720153 b914        Options.min_write_buffer_number_to_merge: 1
2023/06/13-20:11:43.720156 b914     Options.max_write_buffer_number_to_maintain: 0
2023/06/13-20:11:43.720159 b914            Options.bottommost_compression_opts.window_bits: -14
2023/06/13-20:11:43.720162 b914                  Options.bottommost_compression_opts.level: 32767
2023/06/13-20:11:43.720165 b914               Options.bottommost_compression_opts.strategy: 0
2023/06/13-20:11:43.720169 b914         Options.bottommost_compression_opts.max_dict_bytes: 0
2023/06/13-20:11:43.720172 b914         Options.bottommost_compression_opts.zstd_max_train_bytes: 0
2023/06/13-20:11:43.720175 b914                  Options.bottommost_compression_opts.enabled: false
2023/06/13-20:11:43.720178 b914            Options.compression_opts.window_bits: -14
2023/06/13-20:11:43.720181 b914                  Options.compression_opts.level: 32767
2023/06/13-20:11:43.720184 b914               Options.compression_opts.strategy: 0
2023/06/13-20:11:43.720187 b914         Options.compression_opts.max_dict_bytes: 0
2023/06/13-20:11:43.720190 b914         Options.compression_opts.zstd_max_train_bytes: 0
2023/06/13-20:11:43.720194 b914                  Options.compression_opts.enabled: false
2023/06/13-20:11:43.720197 b914      Options.level0_file_num_compaction_trigger: 10
2023/06/13-20:11:43.720200 b914          Options.level0_slowdown_writes_trigger: 20
2023/06/13-20:11:43.720203 b914              Options.level0_stop_writes_trigger: 40
2023/06/13-20:11:43.720206 b914                   Options.target_file_size_base: 67108864
2023/06/13-20:11:43.720209 b914             Options.target_file_size_multiplier: 1
2023/06/13-20:11:43.720212 b914                Options.max_bytes_for_level_base: 536870912
2023/06/13-20:11:43.720215 b914 Options.level_compaction_dynamic_level_bytes: 0
2023/06/13-20:11:43.720218 b914          Options.max_bytes_for_level_multiplier: 10.000000
2023/06/13-20:11:43.720223 b914 Options.max_bytes_for_level_multiplier_addtl[0]: 1
2023/06/13-20:11:43.720226 b914 Options.max_bytes_for_level_multiplier_addtl[1]: 1
2023/06/13-20:11:43.720229 b914 Options.max_bytes_for_level_multiplier_addtl[2]: 1
2023/06/13-20:11:43.720232 b914 Options.max_bytes_for_level_multiplier_addtl[3]: 1
2023/06/13-20:11:43.720235 b914 Options.max_bytes_for_level_multiplier_addtl[4]: 1
2023/06/13-20:11:43.720239 b914 Options.max_bytes_for_level_multiplier_addtl[5]: 1
2023/06/13-20:11:43.720242 b914 Options.max_bytes_for_level_multiplier_addtl[6]: 1
2023/06/13-20:11:43.720245 b914       Options.max_sequential_skip_in_iterations: 8
2023/06/13-20:11:43.720248 b914                    Options.max_compaction_bytes: 1677721600
2023/06/13-20:11:43.720251 b914                        Options.arena_block_size: 8388608
2023/06/13-20:11:43.720254 b914   Options.soft_pending_compaction_bytes_limit: 68719476736
2023/06/13-20:11:43.720257 b914   Options.hard_pending_compaction_bytes_limit: 274877906944
2023/06/13-20:11:43.720261 b914       Options.rate_limit_delay_max_milliseconds: 100
2023/06/13-20:11:43.720264 b914                Options.disable_auto_compactions: 0
2023/06/13-20:11:43.720268 b914                        Options.compaction_style: kCompactionStyleLevel
2023/06/13-20:11:43.720271 b914                          Options.compaction_pri: kByCompensatedSize
2023/06/13-20:11:43.720276 b914 Options.compaction_options_universal.size_ratio: 1
2023/06/13-20:11:43.720280 b914 Options.compaction_options_universal.min_merge_width: 2
2023/06/13-20:11:43.720283 b914 Options.compaction_options_universal.max_merge_width: 4294967295
2023/06/13-20:11:43.720286 b914 Options.compaction_options_universal.max_size_amplification_percent: 200
2023/06/13-20:11:43.720289 b914 Options.compaction_options_universal.compression_size_percent: -1
2023/06/13-20:11:43.720293 b914 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize
2023/06/13-20:11:43.720296 b914 Options.compaction_options_fifo.max_table_files_size: 1073741824
2023/06/13-20:11:43.720299 b914 Options.compaction_options_fifo.allow_compaction: 0
2023/06/13-20:11:43.720302 b914 Options.compaction_options_fifo.ttl: 0
2023/06/13-20:11:43.720305 b914                   Options.table_properties_collectors:
2023/06/13-20:11:43.720309 b914                   Options.inplace_update_support: 0
2023/06/13-20:11:43.720312 b914                 Options.inplace_update_num_locks: 10000
2023/06/13-20:11:43.720315 b914               Options.memtable_prefix_bloom_size_ratio: 0.125000
2023/06/13-20:11:43.720319 b914   Options.memtable_huge_page_size: 0
2023/06/13-20:11:43.720322 b914                           Options.bloom_locality: 0
2023/06/13-20:11:43.720325 b914                    Options.max_successive_merges: 0
2023/06/13-20:11:43.720328 b914                Options.optimize_filters_for_hits: 0
2023/06/13-20:11:43.720331 b914                Options.paranoid_file_checks: 0
2023/06/13-20:11:43.720334 b914                Options.force_consistency_checks: 1
2023/06/13-20:11:43.720337 b914                Options.report_bg_io_stats: 0
2023/06/13-20:11:43.720340 b914                               Options.ttl: 0
2023/06/13-20:11:43.723247 b914 [db\version_set.cc:3724] Recovered from manifest file:E:\IDEA Workspaces\PlayPai\nacos\data\protocol\raft\naming_instance_metadata\log/MANIFEST-000001 succeeded,manifest_file_number is 1, next_file_number is 3, last_sequence is 0, log_number is 0,prev_log_number is 0,max_column_family is 0,min_log_number_to_keep is 0
2023/06/13-20:11:43.723263 b914 [db\version_set.cc:3732] Column family [default] (ID 0), log number is 0
2023/06/13-20:11:43.723807 b914 [db\version_set.cc:3037] Creating manifest 4
2023/06/13-20:11:43.777462 b914 [db\column_family.cc:474] --------------- Options for column family [Configuration]:
2023/06/13-20:11:43.777472 b914               Options.comparator: leveldb.BytewiseComparator
2023/06/13-20:11:43.777476 b914           Options.merge_operator: StringAppendOperator
2023/06/13-20:11:43.777479 b914        Options.compaction_filter: None
2023/06/13-20:11:43.777482 b914        Options.compaction_filter_factory: None
2023/06/13-20:11:43.777485 b914         Options.memtable_factory: SkipListFactory
2023/06/13-20:11:43.777489 b914            Options.table_factory: BlockBasedTable
2023/06/13-20:11:43.777520 b914            table_factory options:   flush_block_policy_factory: FlushBlockBySizePolicyFactory (00000000258ACBD0)
  cache_index_and_filter_blocks: 0
  cache_index_and_filter_blocks_with_high_priority: 1
  pin_l0_filter_and_index_blocks_in_cache: 1
  pin_top_level_index_and_filter: 1
  index_type: 2
  hash_index_allow_collision: 1
  checksum: 1
  no_block_cache: 0
  block_cache: 0000000000646BA0
  block_cache_name: LRUCache
  block_cache_options:
    capacity : 536870912
    num_shard_bits : 8
    strict_capacity_limit : 0
    memory_allocator : None
    high_pri_pool_ratio: 0.000
  block_cache_compressed: 0000000000000000
  persistent_cache: 0000000000000000
  block_size: 4096
  block_size_deviation: 10
  block_restart_interval: 16
  index_block_restart_interval: 1
  metadata_block_size: 8192
  partition_filters: 1
  use_delta_encoding: 1
  filter_policy: nullptr
  whole_key_filtering: 1
  verify_compression: 0
  read_amp_bytes_per_bit: 0
  format_version: 0
  enable_index_compression: 1
  block_align: 0
2023/06/13-20:11:43.777525 b914        Options.write_buffer_size: 67108864
2023/06/13-20:11:43.777562 b914  Options.max_write_buffer_number: 3
2023/06/13-20:11:43.777567 b914          Options.compression: Snappy
2023/06/13-20:11:43.777570 b914                  Options.bottommost_compression: Disabled
2023/06/13-20:11:43.777574 b914       Options.prefix_extractor: rocksdb.FixedPrefix.8
2023/06/13-20:11:43.777577 b914   Options.memtable_insert_with_hint_prefix_extractor: nullptr
2023/06/13-20:11:43.777580 b914             Options.num_levels: 7
2023/06/13-20:11:43.777583 b914        Options.min_write_buffer_number_to_merge: 1
2023/06/13-20:11:43.777586 b914     Options.max_write_buffer_number_to_maintain: 0
2023/06/13-20:11:43.777591 b914            Options.bottommost_compression_opts.window_bits: -14
2023/06/13-20:11:43.777594 b914                  Options.bottommost_compression_opts.level: 32767
2023/06/13-20:11:43.777597 b914               Options.bottommost_compression_opts.strategy: 0
2023/06/13-20:11:43.777600 b914         Options.bottommost_compression_opts.max_dict_bytes: 0
2023/06/13-20:11:43.777604 b914         Options.bottommost_compression_opts.zstd_max_train_bytes: 0
2023/06/13-20:11:43.777607 b914                  Options.bottommost_compression_opts.enabled: false
2023/06/13-20:11:43.777610 b914            Options.compression_opts.window_bits: -14
2023/06/13-20:11:43.777613 b914                  Options.compression_opts.level: 32767
2023/06/13-20:11:43.777616 b914               Options.compression_opts.strategy: 0
2023/06/13-20:11:43.777619 b914         Options.compression_opts.max_dict_bytes: 0
2023/06/13-20:11:43.777622 b914         Options.compression_opts.zstd_max_train_bytes: 0
2023/06/13-20:11:43.777625 b914                  Options.compression_opts.enabled: false
2023/06/13-20:11:43.777628 b914      Options.level0_file_num_compaction_trigger: 10
2023/06/13-20:11:43.777631 b914          Options.level0_slowdown_writes_trigger: 20
2023/06/13-20:11:43.777634 b914              Options.level0_stop_writes_trigger: 40
2023/06/13-20:11:43.777637 b914                   Options.target_file_size_base: 67108864
2023/06/13-20:11:43.777641 b914             Options.target_file_size_multiplier: 1
2023/06/13-20:11:43.777644 b914                Options.max_bytes_for_level_base: 536870912
2023/06/13-20:11:43.777647 b914 Options.level_compaction_dynamic_level_bytes: 0
2023/06/13-20:11:43.777650 b914          Options.max_bytes_for_level_multiplier: 10.000000
2023/06/13-20:11:43.777655 b914 Options.max_bytes_for_level_multiplier_addtl[0]: 1
2023/06/13-20:11:43.777658 b914 Options.max_bytes_for_level_multiplier_addtl[1]: 1
2023/06/13-20:11:43.777661 b914 Options.max_bytes_for_level_multiplier_addtl[2]: 1
2023/06/13-20:11:43.777664 b914 Options.max_bytes_for_level_multiplier_addtl[3]: 1
2023/06/13-20:11:43.777668 b914 Options.max_bytes_for_level_multiplier_addtl[4]: 1
2023/06/13-20:11:43.777671 b914 Options.max_bytes_for_level_multiplier_addtl[5]: 1
2023/06/13-20:11:43.777674 b914 Options.max_bytes_for_level_multiplier_addtl[6]: 1
2023/06/13-20:11:43.777677 b914       Options.max_sequential_skip_in_iterations: 8
2023/06/13-20:11:43.777680 b914                    Options.max_compaction_bytes: 1677721600
2023/06/13-20:11:43.777683 b914                        Options.arena_block_size: 8388608
2023/06/13-20:11:43.777686 b914   Options.soft_pending_compaction_bytes_limit: 68719476736
2023/06/13-20:11:43.777689 b914   Options.hard_pending_compaction_bytes_limit: 274877906944
2023/06/13-20:11:43.777692 b914       Options.rate_limit_delay_max_milliseconds: 100
2023/06/13-20:11:43.777696 b914                Options.disable_auto_compactions: 0
2023/06/13-20:11:43.777699 b914                        Options.compaction_style: kCompactionStyleLevel
2023/06/13-20:11:43.777703 b914                          Options.compaction_pri: kByCompensatedSize
2023/06/13-20:11:43.777706 b914 Options.compaction_options_universal.size_ratio: 1
2023/06/13-20:11:43.777709 b914 Options.compaction_options_universal.min_merge_width: 2
2023/06/13-20:11:43.777712 b914 Options.compaction_options_universal.max_merge_width: 4294967295
2023/06/13-20:11:43.777717 b914 Options.compaction_options_universal.max_size_amplification_percent: 200
2023/06/13-20:11:43.777721 b914 Options.compaction_options_universal.compression_size_percent: -1
2023/06/13-20:11:43.777724 b914 Options.compaction_options_universal.stop_style: kCompactionStopStyleTotalSize
2023/06/13-20:11:43.777727 b914 Options.compaction_options_fifo.max_table_files_size: 1073741824
2023/06/13-20:11:43.777731 b914 Options.compaction_options_fifo.allow_compaction: 0
2023/06/13-20:11:43.777734 b914 Options.compaction_options_fifo.ttl: 0
2023/06/13-20:11:43.777737 b914                   Options.table_properties_collectors:
2023/06/13-20:11:43.777740 b914                   Options.inplace_update_support: 0
2023/06/13-20:11:43.777743 b914                 Options.inplace_update_num_locks: 10000
2023/06/13-20:11:43.777746 b914               Options.memtable_prefix_bloom_size_ratio: 0.125000
2023/06/13-20:11:43.777750 b914   Options.memtable_huge_page_size: 0
2023/06/13-20:11:43.777753 b914                           Options.bloom_locality: 0
2023/06/13-20:11:43.777756 b914                    Options.max_successive_merges: 0
2023/06/13-20:11:43.777759 b914                Options.optimize_filters_for_hits: 0
2023/06/13-20:11:43.777762 b914                Options.paranoid_file_checks: 0
2023/06/13-20:11:43.777765 b914                Options.force_consistency_checks: 1
2023/06/13-20:11:43.777768 b914                Options.report_bg_io_stats: 0
2023/06/13-20:11:43.777771 b914                               Options.ttl: 0
2023/06/13-20:11:43.779325 b914 [db\db_impl.cc:1606] Created column family [Configuration] (ID 1)
2023/06/13-20:11:43.835284 b914 [db\db_impl_open.cc:1314] DB pointer 0000000025961900
2023/06/13-20:11:43.835661 147f8 [WARN] [db\db_impl.cc:669] ------- DUMPING STATS -------
2023/06/13-20:11:43.835674 147f8 [WARN] [db\db_impl.cc:670]
** DB Stats **
Uptime(secs): 0.1 total, 0.1 interval
Cumulative writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 GB, 0.00 MB/s
Cumulative WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 GB, 0.00 MB/s
Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent
Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s
Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 MB, 0.00 MB/s
Interval stall: 00:00:0.000 H:M:S, 0.0 percent
** Compaction Stats [default] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 0.1 total, 0.1 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [default] **
** Compaction Stats [Configuration] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 0.1 total, 0.1 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [Configuration] **
** Compaction Stats [default] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 0.1 total, 0.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [default] **
** Compaction Stats [Configuration] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 0.1 total, 0.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [Configuration] **
2023/06/13-20:11:43.836072 147f8 [WARN] [db\db_impl.cc:617] STATISTICS:
 rocksdb.block.cache.miss COUNT : 0
rocksdb.block.cache.hit COUNT : 0
rocksdb.block.cache.add COUNT : 0
rocksdb.block.cache.add.failures COUNT : 0
rocksdb.block.cache.index.miss COUNT : 0
rocksdb.block.cache.index.hit COUNT : 0
rocksdb.block.cache.index.add COUNT : 0
rocksdb.block.cache.index.bytes.insert COUNT : 0
rocksdb.block.cache.index.bytes.evict COUNT : 0
rocksdb.block.cache.filter.miss COUNT : 0
rocksdb.block.cache.filter.hit COUNT : 0
rocksdb.block.cache.filter.add COUNT : 0
rocksdb.block.cache.filter.bytes.insert COUNT : 0
rocksdb.block.cache.filter.bytes.evict COUNT : 0
rocksdb.block.cache.data.miss COUNT : 0
rocksdb.block.cache.data.hit COUNT : 0
rocksdb.block.cache.data.add COUNT : 0
rocksdb.block.cache.data.bytes.insert COUNT : 0
rocksdb.block.cache.bytes.read COUNT : 0
rocksdb.block.cache.bytes.write COUNT : 0
rocksdb.bloom.filter.useful COUNT : 0
rocksdb.bloom.filter.full.positive COUNT : 0
rocksdb.bloom.filter.full.true.positive COUNT : 0
rocksdb.persistent.cache.hit COUNT : 0
rocksdb.persistent.cache.miss COUNT : 0
rocksdb.sim.block.cache.hit COUNT : 0
rocksdb.sim.block.cache.miss COUNT : 0
rocksdb.memtable.hit COUNT : 0
rocksdb.memtable.miss COUNT : 1
rocksdb.l0.hit COUNT : 0
rocksdb.l1.hit COUNT : 0
rocksdb.l2andup.hit COUNT : 0
rocksdb.compaction.key.drop.new COUNT : 0
rocksdb.compaction.key.drop.obsolete COUNT : 0
rocksdb.compaction.key.drop.range_del COUNT : 0
rocksdb.compaction.key.drop.user COUNT : 0
rocksdb.compaction.range_del.drop.obsolete COUNT : 0
rocksdb.compaction.optimized.del.drop.obsolete COUNT : 0
rocksdb.compaction.cancelled COUNT : 0
rocksdb.number.keys.written COUNT : 0
rocksdb.number.keys.read COUNT : 1
rocksdb.number.keys.updated COUNT : 0
rocksdb.bytes.written COUNT : 0
rocksdb.bytes.read COUNT : 0
rocksdb.number.db.seek COUNT : 3
rocksdb.number.db.next COUNT : 0
rocksdb.number.db.prev COUNT : 0
rocksdb.number.db.seek.found COUNT : 0
rocksdb.number.db.next.found COUNT : 0
rocksdb.number.db.prev.found COUNT : 0
rocksdb.db.iter.bytes.read COUNT : 0
rocksdb.no.file.closes COUNT : 0
rocksdb.no.file.opens COUNT : 0
rocksdb.no.file.errors COUNT : 0
rocksdb.l0.slowdown.micros COUNT : 0
rocksdb.memtable.compaction.micros COUNT : 0
rocksdb.l0.num.files.stall.micros COUNT : 0
rocksdb.stall.micros COUNT : 0
rocksdb.db.mutex.wait.micros COUNT : 0
rocksdb.rate.limit.delay.millis COUNT : 0
rocksdb.num.iterators COUNT : 0
rocksdb.number.multiget.get COUNT : 0
rocksdb.number.multiget.keys.read COUNT : 0
rocksdb.number.multiget.bytes.read COUNT : 0
rocksdb.number.deletes.filtered COUNT : 0
rocksdb.number.merge.failures COUNT : 0
rocksdb.bloom.filter.prefix.checked COUNT : 0
rocksdb.bloom.filter.prefix.useful COUNT : 0
rocksdb.number.reseeks.iteration COUNT : 0
rocksdb.getupdatessince.calls COUNT : 0
rocksdb.block.cachecompressed.miss COUNT : 0
rocksdb.block.cachecompressed.hit COUNT : 0
rocksdb.block.cachecompressed.add COUNT : 0
rocksdb.block.cachecompressed.add.failures COUNT : 0
rocksdb.wal.synced COUNT : 0
rocksdb.wal.bytes COUNT : 0
rocksdb.write.self COUNT : 0
rocksdb.write.other COUNT : 0
rocksdb.write.timeout COUNT : 0
rocksdb.write.wal COUNT : 0
rocksdb.compact.read.bytes COUNT : 0
rocksdb.compact.write.bytes COUNT : 0
rocksdb.flush.write.bytes COUNT : 0
rocksdb.number.direct.load.table.properties COUNT : 0
rocksdb.number.superversion_acquires COUNT : 2
rocksdb.number.superversion_releases COUNT : 0
rocksdb.number.superversion_cleanups COUNT : 0
rocksdb.number.block.compressed COUNT : 0
rocksdb.number.block.decompressed COUNT : 0
rocksdb.number.block.not_compressed COUNT : 0
rocksdb.merge.operation.time.nanos COUNT : 0
rocksdb.filter.operation.time.nanos COUNT : 0
rocksdb.row.cache.hit COUNT : 0
rocksdb.row.cache.miss COUNT : 0
rocksdb.read.amp.estimate.useful.bytes COUNT : 0
rocksdb.read.amp.total.read.bytes COUNT : 0
rocksdb.number.rate_limiter.drains COUNT : 0
rocksdb.number.iter.skip COUNT : 0
rocksdb.blobdb.num.put COUNT : 0
rocksdb.blobdb.num.write COUNT : 0
rocksdb.blobdb.num.get COUNT : 0
rocksdb.blobdb.num.multiget COUNT : 0
rocksdb.blobdb.num.seek COUNT : 0
rocksdb.blobdb.num.next COUNT : 0
rocksdb.blobdb.num.prev COUNT : 0
rocksdb.blobdb.num.keys.written COUNT : 0
rocksdb.blobdb.num.keys.read COUNT : 0
rocksdb.blobdb.bytes.written COUNT : 0
rocksdb.blobdb.bytes.read COUNT : 0
rocksdb.blobdb.write.inlined COUNT : 0
rocksdb.blobdb.write.inlined.ttl COUNT : 0
rocksdb.blobdb.write.blob COUNT : 0
rocksdb.blobdb.write.blob.ttl COUNT : 0
rocksdb.blobdb.blob.file.bytes.written COUNT : 0
rocksdb.blobdb.blob.file.bytes.read COUNT : 0
rocksdb.blobdb.blob.file.synced COUNT : 0
rocksdb.blobdb.blob.index.expired.count COUNT : 0
rocksdb.blobdb.blob.index.expired.size COUNT : 0
rocksdb.blobdb.blob.index.evicted.count COUNT : 0
rocksdb.blobdb.blob.index.evicted.size COUNT : 0
rocksdb.blobdb.gc.num.files COUNT : 0
rocksdb.blobdb.gc.num.new.files COUNT : 0
rocksdb.blobdb.gc.failures COUNT : 0
rocksdb.blobdb.gc.num.keys.overwritten COUNT : 0
rocksdb.blobdb.gc.num.keys.expired COUNT : 0
rocksdb.blobdb.gc.num.keys.relocated COUNT : 0
rocksdb.blobdb.gc.bytes.overwritten COUNT : 0
rocksdb.blobdb.gc.bytes.expired COUNT : 0
rocksdb.blobdb.gc.bytes.relocated COUNT : 0
rocksdb.blobdb.fifo.num.files.evicted COUNT : 0
rocksdb.blobdb.fifo.num.keys.evicted COUNT : 0
rocksdb.blobdb.fifo.bytes.evicted COUNT : 0
rocksdb.txn.overhead.mutex.prepare COUNT : 0
rocksdb.txn.overhead.mutex.old.commit.map COUNT : 0
rocksdb.txn.overhead.duplicate.key COUNT : 0
rocksdb.txn.overhead.mutex.snapshot COUNT : 0
rocksdb.number.multiget.keys.found COUNT : 0
rocksdb.num.iterator.created COUNT : 3
rocksdb.num.iterator.deleted COUNT : 3
rocksdb.db.get.micros P50 : 2.000000 P95 : 2.000000 P99 : 2.000000 P100 : 2.000000 COUNT : 1 SUM : 2
rocksdb.db.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.compaction.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.subcompaction.setup.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.table.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.compaction.outfile.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.wal.file.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.manifest.file.sync.micros P50 : 27299.000000 P95 : 27299.000000 P99 : 27299.000000 P100 : 27299.000000 COUNT : 2 SUM : 50582
rocksdb.table.open.io.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.block.compaction.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.block.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.write.raw.block.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.l0.slowdown.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.memtable.compaction.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.num.files.stall.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.hard.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.soft.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.numfiles.in.singlecompaction P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.write.stall P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.sst.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.num.subcompactions.scheduled P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.per.read P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 1 SUM : 0
rocksdb.bytes.per.write P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.per.multiget P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.compressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.decompressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.compression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.decompression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.num.merge_operands P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.key.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.value.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.next.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.prev.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.gc.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.compression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.decompression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.flush.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
2023/06/13-20:21:43.842579 147f8 [WARN] [db\db_impl.cc:669] ------- DUMPING STATS -------
2023/06/13-20:21:43.842602 147f8 [WARN] [db\db_impl.cc:670]
** DB Stats **
Uptime(secs): 600.1 total, 600.0 interval
Cumulative writes: 1 writes, 2 keys, 1 commit groups, 0.5 writes per commit group, ingest: 0.00 GB, 0.00 MB/s
Cumulative WAL: 1 writes, 1 syncs, 0.50 writes per sync, written: 0.00 GB, 0.00 MB/s
Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent
Interval writes: 1 writes, 2 keys, 1 commit groups, 0.5 writes per commit group, ingest: 0.00 MB, 0.00 MB/s
Interval WAL: 1 writes, 1 syncs, 0.50 writes per sync, written: 0.00 MB, 0.00 MB/s
Interval stall: 00:00:0.000 H:M:S, 0.0 percent
** Compaction Stats [default] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 600.1 total, 600.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [default] **
** Compaction Stats [Configuration] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 600.1 total, 600.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [Configuration] **
** Compaction Stats [default] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 600.1 total, 0.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [default] **
** Compaction Stats [Configuration] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 600.1 total, 0.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [Configuration] **
2023/06/13-20:21:43.842941 147f8 [WARN] [db\db_impl.cc:617] STATISTICS:
 rocksdb.block.cache.miss COUNT : 0
rocksdb.block.cache.hit COUNT : 0
rocksdb.block.cache.add COUNT : 0
rocksdb.block.cache.add.failures COUNT : 0
rocksdb.block.cache.index.miss COUNT : 0
rocksdb.block.cache.index.hit COUNT : 0
rocksdb.block.cache.index.add COUNT : 0
rocksdb.block.cache.index.bytes.insert COUNT : 0
rocksdb.block.cache.index.bytes.evict COUNT : 0
rocksdb.block.cache.filter.miss COUNT : 0
rocksdb.block.cache.filter.hit COUNT : 0
rocksdb.block.cache.filter.add COUNT : 0
rocksdb.block.cache.filter.bytes.insert COUNT : 0
rocksdb.block.cache.filter.bytes.evict COUNT : 0
rocksdb.block.cache.data.miss COUNT : 0
rocksdb.block.cache.data.hit COUNT : 0
rocksdb.block.cache.data.add COUNT : 0
rocksdb.block.cache.data.bytes.insert COUNT : 0
rocksdb.block.cache.bytes.read COUNT : 0
rocksdb.block.cache.bytes.write COUNT : 0
rocksdb.bloom.filter.useful COUNT : 0
rocksdb.bloom.filter.full.positive COUNT : 0
rocksdb.bloom.filter.full.true.positive COUNT : 0
rocksdb.persistent.cache.hit COUNT : 0
rocksdb.persistent.cache.miss COUNT : 0
rocksdb.sim.block.cache.hit COUNT : 0
rocksdb.sim.block.cache.miss COUNT : 0
rocksdb.memtable.hit COUNT : 0
rocksdb.memtable.miss COUNT : 1
rocksdb.l0.hit COUNT : 0
rocksdb.l1.hit COUNT : 0
rocksdb.l2andup.hit COUNT : 0
rocksdb.compaction.key.drop.new COUNT : 0
rocksdb.compaction.key.drop.obsolete COUNT : 0
rocksdb.compaction.key.drop.range_del COUNT : 0
rocksdb.compaction.key.drop.user COUNT : 0
rocksdb.compaction.range_del.drop.obsolete COUNT : 0
rocksdb.compaction.optimized.del.drop.obsolete COUNT : 0
rocksdb.compaction.cancelled COUNT : 0
rocksdb.number.keys.written COUNT : 2
rocksdb.number.keys.read COUNT : 1
rocksdb.number.keys.updated COUNT : 0
rocksdb.bytes.written COUNT : 105
rocksdb.bytes.read COUNT : 0
rocksdb.number.db.seek COUNT : 3
rocksdb.number.db.next COUNT : 0
rocksdb.number.db.prev COUNT : 0
rocksdb.number.db.seek.found COUNT : 0
rocksdb.number.db.next.found COUNT : 0
rocksdb.number.db.prev.found COUNT : 0
rocksdb.db.iter.bytes.read COUNT : 0
rocksdb.no.file.closes COUNT : 0
rocksdb.no.file.opens COUNT : 0
rocksdb.no.file.errors COUNT : 0
rocksdb.l0.slowdown.micros COUNT : 0
rocksdb.memtable.compaction.micros COUNT : 0
rocksdb.l0.num.files.stall.micros COUNT : 0
rocksdb.stall.micros COUNT : 0
rocksdb.db.mutex.wait.micros COUNT : 0
rocksdb.rate.limit.delay.millis COUNT : 0
rocksdb.num.iterators COUNT : 0
rocksdb.number.multiget.get COUNT : 0
rocksdb.number.multiget.keys.read COUNT : 0
rocksdb.number.multiget.bytes.read COUNT : 0
rocksdb.number.deletes.filtered COUNT : 0
rocksdb.number.merge.failures COUNT : 0
rocksdb.bloom.filter.prefix.checked COUNT : 0
rocksdb.bloom.filter.prefix.useful COUNT : 0
rocksdb.number.reseeks.iteration COUNT : 0
rocksdb.getupdatessince.calls COUNT : 0
rocksdb.block.cachecompressed.miss COUNT : 0
rocksdb.block.cachecompressed.hit COUNT : 0
rocksdb.block.cachecompressed.add COUNT : 0
rocksdb.block.cachecompressed.add.failures COUNT : 0
rocksdb.wal.synced COUNT : 1
rocksdb.wal.bytes COUNT : 105
rocksdb.write.self COUNT : 1
rocksdb.write.other COUNT : 0
rocksdb.write.timeout COUNT : 0
rocksdb.write.wal COUNT : 2
rocksdb.compact.read.bytes COUNT : 0
rocksdb.compact.write.bytes COUNT : 0
rocksdb.flush.write.bytes COUNT : 0
rocksdb.number.direct.load.table.properties COUNT : 0
rocksdb.number.superversion_acquires COUNT : 2
rocksdb.number.superversion_releases COUNT : 0
rocksdb.number.superversion_cleanups COUNT : 0
rocksdb.number.block.compressed COUNT : 0
rocksdb.number.block.decompressed COUNT : 0
rocksdb.number.block.not_compressed COUNT : 0
rocksdb.merge.operation.time.nanos COUNT : 0
rocksdb.filter.operation.time.nanos COUNT : 0
rocksdb.row.cache.hit COUNT : 0
rocksdb.row.cache.miss COUNT : 0
rocksdb.read.amp.estimate.useful.bytes COUNT : 0
rocksdb.read.amp.total.read.bytes COUNT : 0
rocksdb.number.rate_limiter.drains COUNT : 0
rocksdb.number.iter.skip COUNT : 0
rocksdb.blobdb.num.put COUNT : 0
rocksdb.blobdb.num.write COUNT : 0
rocksdb.blobdb.num.get COUNT : 0
rocksdb.blobdb.num.multiget COUNT : 0
rocksdb.blobdb.num.seek COUNT : 0
rocksdb.blobdb.num.next COUNT : 0
rocksdb.blobdb.num.prev COUNT : 0
rocksdb.blobdb.num.keys.written COUNT : 0
rocksdb.blobdb.num.keys.read COUNT : 0
rocksdb.blobdb.bytes.written COUNT : 0
rocksdb.blobdb.bytes.read COUNT : 0
rocksdb.blobdb.write.inlined COUNT : 0
rocksdb.blobdb.write.inlined.ttl COUNT : 0
rocksdb.blobdb.write.blob COUNT : 0
rocksdb.blobdb.write.blob.ttl COUNT : 0
rocksdb.blobdb.blob.file.bytes.written COUNT : 0
rocksdb.blobdb.blob.file.bytes.read COUNT : 0
rocksdb.blobdb.blob.file.synced COUNT : 0
rocksdb.blobdb.blob.index.expired.count COUNT : 0
rocksdb.blobdb.blob.index.expired.size COUNT : 0
rocksdb.blobdb.blob.index.evicted.count COUNT : 0
rocksdb.blobdb.blob.index.evicted.size COUNT : 0
rocksdb.blobdb.gc.num.files COUNT : 0
rocksdb.blobdb.gc.num.new.files COUNT : 0
rocksdb.blobdb.gc.failures COUNT : 0
rocksdb.blobdb.gc.num.keys.overwritten COUNT : 0
rocksdb.blobdb.gc.num.keys.expired COUNT : 0
rocksdb.blobdb.gc.num.keys.relocated COUNT : 0
rocksdb.blobdb.gc.bytes.overwritten COUNT : 0
rocksdb.blobdb.gc.bytes.expired COUNT : 0
rocksdb.blobdb.gc.bytes.relocated COUNT : 0
rocksdb.blobdb.fifo.num.files.evicted COUNT : 0
rocksdb.blobdb.fifo.num.keys.evicted COUNT : 0
rocksdb.blobdb.fifo.bytes.evicted COUNT : 0
rocksdb.txn.overhead.mutex.prepare COUNT : 0
rocksdb.txn.overhead.mutex.old.commit.map COUNT : 0
rocksdb.txn.overhead.duplicate.key COUNT : 0
rocksdb.txn.overhead.mutex.snapshot COUNT : 0
rocksdb.number.multiget.keys.found COUNT : 0
rocksdb.num.iterator.created COUNT : 3
rocksdb.num.iterator.deleted COUNT : 3
rocksdb.db.get.micros P50 : 2.000000 P95 : 2.000000 P99 : 2.000000 P100 : 2.000000 COUNT : 1 SUM : 2
rocksdb.db.write.micros P50 : 31606.000000 P95 : 31606.000000 P99 : 31606.000000 P100 : 31606.000000 COUNT : 1 SUM : 31606
rocksdb.compaction.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.subcompaction.setup.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.table.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.compaction.outfile.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.wal.file.sync.micros P50 : 31431.000000 P95 : 31431.000000 P99 : 31431.000000 P100 : 31431.000000 COUNT : 1 SUM : 31431
rocksdb.manifest.file.sync.micros P50 : 27299.000000 P95 : 27299.000000 P99 : 27299.000000 P100 : 27299.000000 COUNT : 2 SUM : 50582
rocksdb.table.open.io.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.block.compaction.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.block.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.write.raw.block.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.l0.slowdown.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.memtable.compaction.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.num.files.stall.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.hard.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.soft.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.numfiles.in.singlecompaction P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.write.stall P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.sst.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.num.subcompactions.scheduled P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.per.read P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 1 SUM : 0
rocksdb.bytes.per.write P50 : 105.000000 P95 : 105.000000 P99 : 105.000000 P100 : 105.000000 COUNT : 1 SUM : 105
rocksdb.bytes.per.multiget P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.compressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.decompressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.compression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.decompression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.num.merge_operands P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.key.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.value.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.next.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.prev.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.gc.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.compression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.decompression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.flush.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
2023/06/13-20:31:43.844123 147f8 [WARN] [db\db_impl.cc:669] ------- DUMPING STATS -------
2023/06/13-20:31:43.844149 147f8 [WARN] [db\db_impl.cc:670]
** DB Stats **
Uptime(secs): 1200.1 total, 600.0 interval
Cumulative writes: 1 writes, 2 keys, 1 commit groups, 0.5 writes per commit group, ingest: 0.00 GB, 0.00 MB/s
Cumulative WAL: 1 writes, 1 syncs, 0.50 writes per sync, written: 0.00 GB, 0.00 MB/s
Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent
Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s
Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 MB, 0.00 MB/s
Interval stall: 00:00:0.000 H:M:S, 0.0 percent
** Compaction Stats [default] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 1200.1 total, 600.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [default] **
** Compaction Stats [Configuration] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 1200.1 total, 600.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [Configuration] **
** Compaction Stats [default] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 1200.1 total, 0.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [default] **
** Compaction Stats [Configuration] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 1200.1 total, 0.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [Configuration] **
2023/06/13-20:31:43.844501 147f8 [WARN] [db\db_impl.cc:617] STATISTICS:
 rocksdb.block.cache.miss COUNT : 0
rocksdb.block.cache.hit COUNT : 0
rocksdb.block.cache.add COUNT : 0
rocksdb.block.cache.add.failures COUNT : 0
rocksdb.block.cache.index.miss COUNT : 0
rocksdb.block.cache.index.hit COUNT : 0
rocksdb.block.cache.index.add COUNT : 0
rocksdb.block.cache.index.bytes.insert COUNT : 0
rocksdb.block.cache.index.bytes.evict COUNT : 0
rocksdb.block.cache.filter.miss COUNT : 0
rocksdb.block.cache.filter.hit COUNT : 0
rocksdb.block.cache.filter.add COUNT : 0
rocksdb.block.cache.filter.bytes.insert COUNT : 0
rocksdb.block.cache.filter.bytes.evict COUNT : 0
rocksdb.block.cache.data.miss COUNT : 0
rocksdb.block.cache.data.hit COUNT : 0
rocksdb.block.cache.data.add COUNT : 0
rocksdb.block.cache.data.bytes.insert COUNT : 0
rocksdb.block.cache.bytes.read COUNT : 0
rocksdb.block.cache.bytes.write COUNT : 0
rocksdb.bloom.filter.useful COUNT : 0
rocksdb.bloom.filter.full.positive COUNT : 0
rocksdb.bloom.filter.full.true.positive COUNT : 0
rocksdb.persistent.cache.hit COUNT : 0
rocksdb.persistent.cache.miss COUNT : 0
rocksdb.sim.block.cache.hit COUNT : 0
rocksdb.sim.block.cache.miss COUNT : 0
rocksdb.memtable.hit COUNT : 0
rocksdb.memtable.miss COUNT : 1
rocksdb.l0.hit COUNT : 0
rocksdb.l1.hit COUNT : 0
rocksdb.l2andup.hit COUNT : 0
rocksdb.compaction.key.drop.new COUNT : 0
rocksdb.compaction.key.drop.obsolete COUNT : 0
rocksdb.compaction.key.drop.range_del COUNT : 0
rocksdb.compaction.key.drop.user COUNT : 0
rocksdb.compaction.range_del.drop.obsolete COUNT : 0
rocksdb.compaction.optimized.del.drop.obsolete COUNT : 0
rocksdb.compaction.cancelled COUNT : 0
rocksdb.number.keys.written COUNT : 2
rocksdb.number.keys.read COUNT : 1
rocksdb.number.keys.updated COUNT : 0
rocksdb.bytes.written COUNT : 105
rocksdb.bytes.read COUNT : 0
rocksdb.number.db.seek COUNT : 3
rocksdb.number.db.next COUNT : 0
rocksdb.number.db.prev COUNT : 0
rocksdb.number.db.seek.found COUNT : 0
rocksdb.number.db.next.found COUNT : 0
rocksdb.number.db.prev.found COUNT : 0
rocksdb.db.iter.bytes.read COUNT : 0
rocksdb.no.file.closes COUNT : 0
rocksdb.no.file.opens COUNT : 0
rocksdb.no.file.errors COUNT : 0
rocksdb.l0.slowdown.micros COUNT : 0
rocksdb.memtable.compaction.micros COUNT : 0
rocksdb.l0.num.files.stall.micros COUNT : 0
rocksdb.stall.micros COUNT : 0
rocksdb.db.mutex.wait.micros COUNT : 0
rocksdb.rate.limit.delay.millis COUNT : 0
rocksdb.num.iterators COUNT : 0
rocksdb.number.multiget.get COUNT : 0
rocksdb.number.multiget.keys.read COUNT : 0
rocksdb.number.multiget.bytes.read COUNT : 0
rocksdb.number.deletes.filtered COUNT : 0
rocksdb.number.merge.failures COUNT : 0
rocksdb.bloom.filter.prefix.checked COUNT : 0
rocksdb.bloom.filter.prefix.useful COUNT : 0
rocksdb.number.reseeks.iteration COUNT : 0
rocksdb.getupdatessince.calls COUNT : 0
rocksdb.block.cachecompressed.miss COUNT : 0
rocksdb.block.cachecompressed.hit COUNT : 0
rocksdb.block.cachecompressed.add COUNT : 0
rocksdb.block.cachecompressed.add.failures COUNT : 0
rocksdb.wal.synced COUNT : 1
rocksdb.wal.bytes COUNT : 105
rocksdb.write.self COUNT : 1
rocksdb.write.other COUNT : 0
rocksdb.write.timeout COUNT : 0
rocksdb.write.wal COUNT : 2
rocksdb.compact.read.bytes COUNT : 0
rocksdb.compact.write.bytes COUNT : 0
rocksdb.flush.write.bytes COUNT : 0
rocksdb.number.direct.load.table.properties COUNT : 0
rocksdb.number.superversion_acquires COUNT : 2
rocksdb.number.superversion_releases COUNT : 0
rocksdb.number.superversion_cleanups COUNT : 0
rocksdb.number.block.compressed COUNT : 0
rocksdb.number.block.decompressed COUNT : 0
rocksdb.number.block.not_compressed COUNT : 0
rocksdb.merge.operation.time.nanos COUNT : 0
rocksdb.filter.operation.time.nanos COUNT : 0
rocksdb.row.cache.hit COUNT : 0
rocksdb.row.cache.miss COUNT : 0
rocksdb.read.amp.estimate.useful.bytes COUNT : 0
rocksdb.read.amp.total.read.bytes COUNT : 0
rocksdb.number.rate_limiter.drains COUNT : 0
rocksdb.number.iter.skip COUNT : 0
rocksdb.blobdb.num.put COUNT : 0
rocksdb.blobdb.num.write COUNT : 0
rocksdb.blobdb.num.get COUNT : 0
rocksdb.blobdb.num.multiget COUNT : 0
rocksdb.blobdb.num.seek COUNT : 0
rocksdb.blobdb.num.next COUNT : 0
rocksdb.blobdb.num.prev COUNT : 0
rocksdb.blobdb.num.keys.written COUNT : 0
rocksdb.blobdb.num.keys.read COUNT : 0
rocksdb.blobdb.bytes.written COUNT : 0
rocksdb.blobdb.bytes.read COUNT : 0
rocksdb.blobdb.write.inlined COUNT : 0
rocksdb.blobdb.write.inlined.ttl COUNT : 0
rocksdb.blobdb.write.blob COUNT : 0
rocksdb.blobdb.write.blob.ttl COUNT : 0
rocksdb.blobdb.blob.file.bytes.written COUNT : 0
rocksdb.blobdb.blob.file.bytes.read COUNT : 0
rocksdb.blobdb.blob.file.synced COUNT : 0
rocksdb.blobdb.blob.index.expired.count COUNT : 0
rocksdb.blobdb.blob.index.expired.size COUNT : 0
rocksdb.blobdb.blob.index.evicted.count COUNT : 0
rocksdb.blobdb.blob.index.evicted.size COUNT : 0
rocksdb.blobdb.gc.num.files COUNT : 0
rocksdb.blobdb.gc.num.new.files COUNT : 0
rocksdb.blobdb.gc.failures COUNT : 0
rocksdb.blobdb.gc.num.keys.overwritten COUNT : 0
rocksdb.blobdb.gc.num.keys.expired COUNT : 0
rocksdb.blobdb.gc.num.keys.relocated COUNT : 0
rocksdb.blobdb.gc.bytes.overwritten COUNT : 0
rocksdb.blobdb.gc.bytes.expired COUNT : 0
rocksdb.blobdb.gc.bytes.relocated COUNT : 0
rocksdb.blobdb.fifo.num.files.evicted COUNT : 0
rocksdb.blobdb.fifo.num.keys.evicted COUNT : 0
rocksdb.blobdb.fifo.bytes.evicted COUNT : 0
rocksdb.txn.overhead.mutex.prepare COUNT : 0
rocksdb.txn.overhead.mutex.old.commit.map COUNT : 0
rocksdb.txn.overhead.duplicate.key COUNT : 0
rocksdb.txn.overhead.mutex.snapshot COUNT : 0
rocksdb.number.multiget.keys.found COUNT : 0
rocksdb.num.iterator.created COUNT : 3
rocksdb.num.iterator.deleted COUNT : 3
rocksdb.db.get.micros P50 : 2.000000 P95 : 2.000000 P99 : 2.000000 P100 : 2.000000 COUNT : 1 SUM : 2
rocksdb.db.write.micros P50 : 31606.000000 P95 : 31606.000000 P99 : 31606.000000 P100 : 31606.000000 COUNT : 1 SUM : 31606
rocksdb.compaction.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.subcompaction.setup.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.table.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.compaction.outfile.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.wal.file.sync.micros P50 : 31431.000000 P95 : 31431.000000 P99 : 31431.000000 P100 : 31431.000000 COUNT : 1 SUM : 31431
rocksdb.manifest.file.sync.micros P50 : 27299.000000 P95 : 27299.000000 P99 : 27299.000000 P100 : 27299.000000 COUNT : 2 SUM : 50582
rocksdb.table.open.io.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.block.compaction.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.block.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.write.raw.block.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.l0.slowdown.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.memtable.compaction.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.num.files.stall.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.hard.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.soft.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.numfiles.in.singlecompaction P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.write.stall P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.sst.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.num.subcompactions.scheduled P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.per.read P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 1 SUM : 0
rocksdb.bytes.per.write P50 : 105.000000 P95 : 105.000000 P99 : 105.000000 P100 : 105.000000 COUNT : 1 SUM : 105
rocksdb.bytes.per.multiget P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.compressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.decompressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.compression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.decompression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.num.merge_operands P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.key.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.value.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.next.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.prev.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.gc.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.compression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.decompression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.flush.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
2023/06/13-20:41:43.850521 147f8 [WARN] [db\db_impl.cc:669] ------- DUMPING STATS -------
2023/06/13-20:41:43.850575 147f8 [WARN] [db\db_impl.cc:670]
** DB Stats **
Uptime(secs): 1800.1 total, 600.0 interval
Cumulative writes: 1 writes, 2 keys, 1 commit groups, 0.5 writes per commit group, ingest: 0.00 GB, 0.00 MB/s
Cumulative WAL: 1 writes, 1 syncs, 0.50 writes per sync, written: 0.00 GB, 0.00 MB/s
Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent
Interval writes: 0 writes, 0 keys, 0 commit groups, 0.0 writes per commit group, ingest: 0.00 MB, 0.00 MB/s
Interval WAL: 0 writes, 0 syncs, 0.00 writes per sync, written: 0.00 MB, 0.00 MB/s
Interval stall: 00:00:0.000 H:M:S, 0.0 percent
** Compaction Stats [default] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 1800.1 total, 600.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [default] **
** Compaction Stats [Configuration] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 1800.1 total, 600.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [Configuration] **
** Compaction Stats [default] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 1800.1 total, 0.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [default] **
** Compaction Stats [Configuration] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Sum      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
 Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0         0         0    0.000       0      0
Uptime(secs): 1800.1 total, 0.0 interval
Flush(GB): cumulative 0.000, interval 0.000
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Interval compaction: 0.00 GB write, 0.00 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.0 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
** File Read Latency Histogram By Level [Configuration] **
2023/06/13-20:41:43.851049 147f8 [WARN] [db\db_impl.cc:617] STATISTICS:
 rocksdb.block.cache.miss COUNT : 0
rocksdb.block.cache.hit COUNT : 0
rocksdb.block.cache.add COUNT : 0
rocksdb.block.cache.add.failures COUNT : 0
rocksdb.block.cache.index.miss COUNT : 0
rocksdb.block.cache.index.hit COUNT : 0
rocksdb.block.cache.index.add COUNT : 0
rocksdb.block.cache.index.bytes.insert COUNT : 0
rocksdb.block.cache.index.bytes.evict COUNT : 0
rocksdb.block.cache.filter.miss COUNT : 0
rocksdb.block.cache.filter.hit COUNT : 0
rocksdb.block.cache.filter.add COUNT : 0
rocksdb.block.cache.filter.bytes.insert COUNT : 0
rocksdb.block.cache.filter.bytes.evict COUNT : 0
rocksdb.block.cache.data.miss COUNT : 0
rocksdb.block.cache.data.hit COUNT : 0
rocksdb.block.cache.data.add COUNT : 0
rocksdb.block.cache.data.bytes.insert COUNT : 0
rocksdb.block.cache.bytes.read COUNT : 0
rocksdb.block.cache.bytes.write COUNT : 0
rocksdb.bloom.filter.useful COUNT : 0
rocksdb.bloom.filter.full.positive COUNT : 0
rocksdb.bloom.filter.full.true.positive COUNT : 0
rocksdb.persistent.cache.hit COUNT : 0
rocksdb.persistent.cache.miss COUNT : 0
rocksdb.sim.block.cache.hit COUNT : 0
rocksdb.sim.block.cache.miss COUNT : 0
rocksdb.memtable.hit COUNT : 1
rocksdb.memtable.miss COUNT : 1
rocksdb.l0.hit COUNT : 0
rocksdb.l1.hit COUNT : 0
rocksdb.l2andup.hit COUNT : 0
rocksdb.compaction.key.drop.new COUNT : 0
rocksdb.compaction.key.drop.obsolete COUNT : 0
rocksdb.compaction.key.drop.range_del COUNT : 0
rocksdb.compaction.key.drop.user COUNT : 0
rocksdb.compaction.range_del.drop.obsolete COUNT : 0
rocksdb.compaction.optimized.del.drop.obsolete COUNT : 0
rocksdb.compaction.cancelled COUNT : 0
rocksdb.number.keys.written COUNT : 2
rocksdb.number.keys.read COUNT : 2
rocksdb.number.keys.updated COUNT : 0
rocksdb.bytes.written COUNT : 105
rocksdb.bytes.read COUNT : 35
rocksdb.number.db.seek COUNT : 3
rocksdb.number.db.next COUNT : 0
rocksdb.number.db.prev COUNT : 0
rocksdb.number.db.seek.found COUNT : 0
rocksdb.number.db.next.found COUNT : 0
rocksdb.number.db.prev.found COUNT : 0
rocksdb.db.iter.bytes.read COUNT : 0
rocksdb.no.file.closes COUNT : 0
rocksdb.no.file.opens COUNT : 0
rocksdb.no.file.errors COUNT : 0
rocksdb.l0.slowdown.micros COUNT : 0
rocksdb.memtable.compaction.micros COUNT : 0
rocksdb.l0.num.files.stall.micros COUNT : 0
rocksdb.stall.micros COUNT : 0
rocksdb.db.mutex.wait.micros COUNT : 0
rocksdb.rate.limit.delay.millis COUNT : 0
rocksdb.num.iterators COUNT : 0
rocksdb.number.multiget.get COUNT : 0
rocksdb.number.multiget.keys.read COUNT : 0
rocksdb.number.multiget.bytes.read COUNT : 0
rocksdb.number.deletes.filtered COUNT : 0
rocksdb.number.merge.failures COUNT : 0
rocksdb.bloom.filter.prefix.checked COUNT : 0
rocksdb.bloom.filter.prefix.useful COUNT : 0
rocksdb.number.reseeks.iteration COUNT : 0
rocksdb.getupdatessince.calls COUNT : 0
rocksdb.block.cachecompressed.miss COUNT : 0
rocksdb.block.cachecompressed.hit COUNT : 0
rocksdb.block.cachecompressed.add COUNT : 0
rocksdb.block.cachecompressed.add.failures COUNT : 0
rocksdb.wal.synced COUNT : 1
rocksdb.wal.bytes COUNT : 105
rocksdb.write.self COUNT : 1
rocksdb.write.other COUNT : 0
rocksdb.write.timeout COUNT : 0
rocksdb.write.wal COUNT : 2
rocksdb.compact.read.bytes COUNT : 0
rocksdb.compact.write.bytes COUNT : 0
rocksdb.flush.write.bytes COUNT : 0
rocksdb.number.direct.load.table.properties COUNT : 0
rocksdb.number.superversion_acquires COUNT : 3
rocksdb.number.superversion_releases COUNT : 0
rocksdb.number.superversion_cleanups COUNT : 0
rocksdb.number.block.compressed COUNT : 0
rocksdb.number.block.decompressed COUNT : 0
rocksdb.number.block.not_compressed COUNT : 0
rocksdb.merge.operation.time.nanos COUNT : 0
rocksdb.filter.operation.time.nanos COUNT : 0
rocksdb.row.cache.hit COUNT : 0
rocksdb.row.cache.miss COUNT : 0
rocksdb.read.amp.estimate.useful.bytes COUNT : 0
rocksdb.read.amp.total.read.bytes COUNT : 0
rocksdb.number.rate_limiter.drains COUNT : 0
rocksdb.number.iter.skip COUNT : 0
rocksdb.blobdb.num.put COUNT : 0
rocksdb.blobdb.num.write COUNT : 0
rocksdb.blobdb.num.get COUNT : 0
rocksdb.blobdb.num.multiget COUNT : 0
rocksdb.blobdb.num.seek COUNT : 0
rocksdb.blobdb.num.next COUNT : 0
rocksdb.blobdb.num.prev COUNT : 0
rocksdb.blobdb.num.keys.written COUNT : 0
rocksdb.blobdb.num.keys.read COUNT : 0
rocksdb.blobdb.bytes.written COUNT : 0
rocksdb.blobdb.bytes.read COUNT : 0
rocksdb.blobdb.write.inlined COUNT : 0
rocksdb.blobdb.write.inlined.ttl COUNT : 0
rocksdb.blobdb.write.blob COUNT : 0
rocksdb.blobdb.write.blob.ttl COUNT : 0
rocksdb.blobdb.blob.file.bytes.written COUNT : 0
rocksdb.blobdb.blob.file.bytes.read COUNT : 0
rocksdb.blobdb.blob.file.synced COUNT : 0
rocksdb.blobdb.blob.index.expired.count COUNT : 0
rocksdb.blobdb.blob.index.expired.size COUNT : 0
rocksdb.blobdb.blob.index.evicted.count COUNT : 0
rocksdb.blobdb.blob.index.evicted.size COUNT : 0
rocksdb.blobdb.gc.num.files COUNT : 0
rocksdb.blobdb.gc.num.new.files COUNT : 0
rocksdb.blobdb.gc.failures COUNT : 0
rocksdb.blobdb.gc.num.keys.overwritten COUNT : 0
rocksdb.blobdb.gc.num.keys.expired COUNT : 0
rocksdb.blobdb.gc.num.keys.relocated COUNT : 0
rocksdb.blobdb.gc.bytes.overwritten COUNT : 0
rocksdb.blobdb.gc.bytes.expired COUNT : 0
rocksdb.blobdb.gc.bytes.relocated COUNT : 0
rocksdb.blobdb.fifo.num.files.evicted COUNT : 0
rocksdb.blobdb.fifo.num.keys.evicted COUNT : 0
rocksdb.blobdb.fifo.bytes.evicted COUNT : 0
rocksdb.txn.overhead.mutex.prepare COUNT : 0
rocksdb.txn.overhead.mutex.old.commit.map COUNT : 0
rocksdb.txn.overhead.duplicate.key COUNT : 0
rocksdb.txn.overhead.mutex.snapshot COUNT : 0
rocksdb.number.multiget.keys.found COUNT : 0
rocksdb.num.iterator.created COUNT : 3
rocksdb.num.iterator.deleted COUNT : 3
rocksdb.db.get.micros P50 : 2.000000 P95 : 21.300000 P99 : 21.860000 P100 : 22.000000 COUNT : 2 SUM : 24
rocksdb.db.write.micros P50 : 31606.000000 P95 : 31606.000000 P99 : 31606.000000 P100 : 31606.000000 COUNT : 1 SUM : 31606
rocksdb.compaction.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.subcompaction.setup.times.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.table.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.compaction.outfile.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.wal.file.sync.micros P50 : 31431.000000 P95 : 31431.000000 P99 : 31431.000000 P100 : 31431.000000 COUNT : 1 SUM : 31431
rocksdb.manifest.file.sync.micros P50 : 27299.000000 P95 : 27299.000000 P99 : 27299.000000 P100 : 27299.000000 COUNT : 2 SUM : 50582
rocksdb.table.open.io.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.block.compaction.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.block.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.write.raw.block.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.l0.slowdown.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.memtable.compaction.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.num.files.stall.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.hard.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.soft.rate.limit.delay.count P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.numfiles.in.singlecompaction P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.write.stall P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.sst.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.num.subcompactions.scheduled P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.per.read P50 : 1.000000 P95 : 35.000000 P99 : 35.000000 P100 : 35.000000 COUNT : 2 SUM : 35
rocksdb.bytes.per.write P50 : 105.000000 P95 : 105.000000 P99 : 105.000000 P100 : 105.000000 COUNT : 1 SUM : 105
rocksdb.bytes.per.multiget P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.compressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.bytes.decompressed P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.compression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.decompression.times.nanos P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.read.num.merge_operands P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.key.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.value.size P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.get.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.multiget.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.seek.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.next.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.prev.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.write.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.read.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.blob.file.sync.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.gc.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.compression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.blobdb.decompression.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
rocksdb.db.flush.micros P50 : 0.000000 P95 : 0.000000 P99 : 0.000000 P100 : 0.000000 COUNT : 0 SUM : 0
Diff truncated after the above file
nacos/data/protocol/raft/naming_instance_metadata/log/MANIFEST-000004 nacos/data/protocol/raft/naming_instance_metadata/log/OPTIONS-000006 nacos/data/protocol/raft/naming_instance_metadata/log/OPTIONS-000008 nacos/data/protocol/raft/naming_instance_metadata/meta-data/raft_meta nacos/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_1/__raft_snapshot_meta nacos/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_1/instance_metadata.zip nacos/data/protocol/raft/naming_persistent_service_v2/log/000003.log nacos/data/protocol/raft/naming_persistent_service_v2/log/CURRENT nacos/data/protocol/raft/naming_persistent_service_v2/log/IDENTITY nacos/data/protocol/raft/naming_persistent_service_v2/log/LOCK nacos/data/protocol/raft/naming_persistent_service_v2/log/LOG nacos/data/protocol/raft/naming_persistent_service_v2/log/MANIFEST-000004 nacos/data/protocol/raft/naming_persistent_service_v2/log/OPTIONS-000006 nacos/data/protocol/raft/naming_persistent_service_v2/log/OPTIONS-000008 nacos/data/protocol/raft/naming_persistent_service_v2/meta-data/raft_meta nacos/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_1/__raft_snapshot_meta nacos/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_1/persistent_instance.zip nacos/data/protocol/raft/naming_service_metadata/log/000003.log nacos/data/protocol/raft/naming_service_metadata/log/CURRENT nacos/data/protocol/raft/naming_service_metadata/log/IDENTITY nacos/data/protocol/raft/naming_service_metadata/log/LOCK nacos/data/protocol/raft/naming_service_metadata/log/LOG nacos/data/protocol/raft/naming_service_metadata/log/MANIFEST-000004 nacos/data/protocol/raft/naming_service_metadata/log/OPTIONS-000006 nacos/data/protocol/raft/naming_service_metadata/log/OPTIONS-000008 nacos/data/protocol/raft/naming_service_metadata/meta-data/raft_meta nacos/data/protocol/raft/naming_service_metadata/snapshot/snapshot_1/__raft_snapshot_meta nacos/data/protocol/raft/naming_service_metadata/snapshot/snapshot_1/service_metadata.zip nacos/data/tps/CONFIG_PUSH_COUNT nacos/data/tps/CONFIG_PUSH_FAIL nacos/data/tps/CONFIG_PUSH_SUCCESS nacos/data/tps/ClusterConfigChangeNotify nacos/data/tps/ConfigListen nacos/data/tps/ConfigPublish nacos/data/tps/ConfigQuery nacos/data/tps/ConfigRemove nacos/data/tps/HealthCheck nacos/data/tps/NAMING_DISTRO_SYNC nacos/data/tps/NAMING_DISTRO_SYNC_FAIL nacos/data/tps/NAMING_DISTRO_SYNC_SUCCESS nacos/data/tps/NAMING_DISTRO_VERIFY nacos/data/tps/NAMING_DISTRO_VERIFY_FAIL nacos/data/tps/NAMING_DISTRO_VERIFY_SUCCESS nacos/data/tps/NAMING_RPC_PUSH nacos/data/tps/NAMING_RPC_PUSH_FAIL nacos/data/tps/NAMING_RPC_PUSH_SUCCESS nacos/data/tps/NAMING_UDP_PUSH nacos/data/tps/NAMING_UDP_PUSH_FAIL nacos/data/tps/NAMING_UDP_PUSH_SUCCESS