Quantcast
Channel: OSCHINA 社区最新新闻
Viewing all 44809 articles
Browse latest View live

Hutool 4.3.2 发布,可能是2018年最后一个版本

$
0
0

Hutool是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以"甜甜的"。Hutool 最初是我项目中util包的一个整理,后来慢慢积累并加入更多非业务相关功能,并广泛学习其它开源项目精髓,经过自己整理修改,最终形成丰富的开源工具集。

-------------------------------------------------------------------------------------------------------------------

4.3.2是Hutool2018年最后一个版本了,最近大家都在讨论圣诞节彩蛋事件,不过Hutool不会有彩蛋(哈哈,作者主要不会写,太菜了),要说彩蛋,可能就是:

-------------------------------------------------------------------------------------------------------------------

新特性
【core】       新增DateUtil.dateNew方法(issue#217@Github)
【extra】      JschUtil.exec增加重载,可选错误输出(issue#IPNAB@Gitee)
【core】       增加NoLock(issue#218@Github)
【core】       QrCode.decode改进
【core】       合并无必要的构造方法
【setting】    Setting.getMap方法在分组不存在时返回空Map而非null(issue#IPU2X@Gitee)
【core】       增加TypeReference类(issue#IPAML@Gitee)
【json】       支持TypeReference类转换,并对toBean逻辑做了大量变动(issue#IPAML@Gitee)
【core】       ArrayUtil.get和CollUtil.get返回null而非空指针(issue#IPKZO@Gitee)
【json】       JSONObject调整构造方法,支持对象转为JSON可选是否有序(issue#IP1Q2@Gitee)
【core】       BeanUtil增加hasGetter和hasSetter方法
【core】       StrUtil增加isUperCase和isLowerCase方法,增加removeAll和removeAllLineBreaks(issue#IP7PT@Gitee)
【db】         增加PostgreSQL的单元测试
【core】       ArrayUtil增加sub方法泛型支持
【core】       从Apache-commons-lang3移植Builder(issue#IPALY@Gitee)
【core】       增加Func1接口,ReUtil和StrUtil增加Func1参数的replace方法(pr#27@Gitee)
【db】         Table增加getColumn方法,Column补充注释(issue#209@Github)

Bug修复
【db】         解决数据源识别错误问题(issue#IPNI7@Gitee)
【core】       修复DateField.of缺失字段问题(issue#IPP51@Gitee)
【core】       JSONObject中忽略空值失效问题(issue#221@Github)
【extra】      修复VelocityEngine中模板中文乱码问题(issue#216@Github)
【cron】       修复L代表的最后一天无效问题(issue#IP5PB@Gitee)
【core】       修复验证15位身份证月的判断问题(issue#IP70D@Gitee)
【poi】        修复多次调用write方法写出多个标题问题(issue#212@Github)
【extra】      修复模板写出文件空白问题(issue#208@Github)


Java 全功能开源办公软件 | O2OA V4.12.26 发布!

$
0
0

 

Java 全功能开源办公软件-O2OA迎来2018年度最后一次更新,表单制作功能进行深度优化,让表单制作更加便捷快速,除此之外,新版本也优化了对国产数据库达梦的支持。

最新版本 O2OA v4.12.26
- 新增功能
[表单设计]表单和页面增加导入功能,支持HTML、JSON格式。
[表单设计]增加Word文件直接导入转换为表单。
[表单设计]表单和页面增加“脚本”选项卡,可更方便的查找和编写脚本。
[钉钉集成]钉钉接口从corpId变更为appKey。
[数据库支持]修正达梦数据库默认schema的问题。
[数据结构]增加对Map类型数据存储的功能。
[文件传输]文件格式增加对xdoc(application/vnd.openxmlformats-officedocument.wordprocessingml.document)文件的支持。
- 功能变更
[表单设计]优化流程表单展现资源载入性能。
[数据库支持]默认打包中的达梦数据库改为7.6版本。
[WEB支持]修正了 http 请求中使用非限定头导致的chrome和firefox安全提示的问题。
[会议管理]会议管理修改启动审批流程的接口方式。
- bug修复
[数据视图]修正视图设计中,删除列偶尔会发生异常的问题。
[文件传输]修正人员和组织设计元素中,某些属性无效的问题。
[文件传输]修正对于poi版本不一致包应用的问题。

 

与其他协同办公产品相比,O2OA表单设计器 :

  • 数十种可直接使用的表单控件,支持拖拽式表单设计。

  • 支持对表单上各元素自定义样式,编写事件以提高用户体验和业务需求适应能力。

  • 支持PC端和手机端表单分离,提高移动办公体验。

  • 可以直接导入WORD文件、EXCEL文件提高表单制作效率,降低表单制作门槛。

导入WORD文件作为O2OA表单

用户可以直接使用WORD制作一个符合要求的表单,存储为.doc格式,如下图所示:

然后在O2OA中创建一个空表单,在表单设计器里选择导入WORD或者EXCEL文件,如下图所示:

在弹出的对话框中勾选“在表格的空单元格中添加输入框”和“去除空元素”,然后选择文件,点击导入即可将使用WORD制作的表单样式导入到O2OA表单设计器中:

导入后的效果如下图所示:

预览效果:

 

骚动起来!ICEC 2.0 重磅发布,构建 Spring Boot 应用生态圈

$
0
0

icec从开源以来,已走过1年时间,在项目中不断实践完善,在元旦到来之际,重磅发布2.0版本。在说明更新内容前,先阐述下作者关于构建《springboot应用生态圈》的想法,希望更多的人参与进来:

1、基于同一套权限管理平台进行开发;

2、依赖即整合:所有业务应用作为模块管理,maven依赖后即完成整合,快速发布;

3、全员参与:不需要提交源码给作者,只需要把自己的项目按照要求的技术栈,满足《依赖即整合》的要求,把git地址发给作者,收入应用目录即可。

4、商业或闭源软件:同样是满足《依赖即整合》的要求,向作者申请加入应用生态,提供应用介绍,截图。

在2018年icec1.x主要工作是在基础模块构建上,相继整合了工作流、任务调度、阿里短信、ireport等,2019年将重点关注业务,开源共建,不断创新!

icec2.0主要更新:

1、springboot升级到2.1.1;

2、项目结构调整,分平台、模块、工具、应用;

3、数据库无缝切换,修改数据库连接配置即可

icec 是一个少封装、易上手的快速开发平台,只需要掌握java,html,sql这3大基础,轻松上手,1天掌握!

主要技术栈:

springboot 
thymeleaf  
beetlsql    
shiro
druid
jwt
logback 
lombok

界面预览:

React UI 库:React Suite 3.5.1 版本更新

$
0
0

React Suite 是一套 React 组件库,为后台产品而生。

V3.5.1 版本发布,更新内容如下:

  • Improve: 改善日历上选择月份的体验 (#334)

  • Refactor: 重构<ButtonToolbar>的样式 (#333)

  • Breaking: 删除 <DatePicker> 和 <DateRangePicker> 的 limitStartYear 属性 (#334)

  • Bugfix: 修复 <CheckPicker> 设置 toggleComponentClass 以后出现异常 (#329)

  • Bugfix: 修复 disabledDate 不能禁用月份 (#327)

  • Bugfix: 修复 <SelectPicker><CheckPicker>在受控情况下,选项焦点位置错误 (#324)

  • Bugfix: 修复 <DateRangePicker> 日历上显示的日期与值不一致的问题 (#323)

  • Bugfix: 修复了一些样式问题 (#321)

  • Bugfix: 修复了一些 TypeScript 问题 (#320,#325)

  • Chore: 调整 Schema 中规则校验的优先级 (#schema-9)

Web 富文本编辑器 Neditor 2.1.12 发布,支持远程图片本地化

$
0
0

BUG 修复

  • 解决粘贴图片时提交的图片表单名称为 undefined 的问题 (by @ciey )

注:此版本支持远程图片本地化(默认开启)【关闭请在: config 里设置 catchRemoteImageEnable】

更新内容:

  • 更新iconfont文件,修复替换图标错误

  • 完成细节美化

    Demo:  https://demo.neditor.notadd.com/

    Neditor 是基于 ueditor 的更现代化的富文本编辑器,支持HTTPS。

    下载地址

    Jmockdata 4.0.1 发布,随机模拟 Java 数据

    $
    0
    0

    Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。

    mark

    Jmockdata插件通过随机算法模拟Java数据。

    更新内容

    • 修复若干bug

    • 增加支持自定义boolean类型模拟设置

    WePush v2.3.2 发布,专注批量推送的小而美的工具

    $
    0
    0

    WePush v2.3.2 已发布,它是一个专注批量推送的小而美的工具。

    目前支持的消息类型:模板消息-公众号、模板消息-小程序、微信客服消息、阿里云短信、阿里大于模板短信、腾讯云短信、云片网短信。

    更新内容如下:

    v2.3.2

    • 通过文件导入时,自动判断文件字符集,防止乱码

    • 微信公众号配置必填项校验优化

    • 使用线程池,且限制最大线程数

    • 优化1366分辨率下默认字体大小

    • 优化依赖,减小安装包体积

    • 修复安全漏洞,解决代码中的Warning

    • 移除git中的大文件,大大大幅减少clone时的体积

    kpc v0.7.10 发布,支持多框架的前端组件库

    $
    0
    0

    kpc是一个支持多框架的前端组件库,旨在使用一套组件库源码满足Intact/Vue/React框架的开发需求,使不同技术栈、不同团队之间,所开发的产品的设计和交互统一

    更新日志

    1. Refactor 升级babel@7进行构建,自动引入实例方法polyfill,提高兼容性 #157

    2. Add 新增React开始文档,以及Vue组件使用文档(React组件使用文档还在撰写中...)

    3. Add Tree在过滤时,默认展开匹配的节点 #156

    4. Fix 修复Collapse默认主题下没有折叠展开动画的问题 #153

    5. Fix 修复Collapse在没有内容导致高度为0时,动画不执行结束回调的问题 #150 #162

    6. Fix 修复IE下多处兼容性问题,目前支持IE10及以上 #155


    Apache NetBeans 10.0 正式发布,支持 Java 11

    $
    0
    0

    Apache NetBeans (incubating) 10.0 已正式发布,这是一个功能齐全的 IDE ,可用于 Java SE、PHP 和 JavaScript 等语言的开发。

    值得关注的更新

    支持 JDK 11

    NetBeans 10.0 提供对 JDK 11 的支持,包括:

    • nbjavac 模块升级

    • 从 JDK 中移除 Java EE 和 Corba 模块

    • 弃用 Nashorn Javascript 引擎

    • 允许在声明隐式类型的 lambda 表达式的形式参数时使用 var

    其他特性

    随着 Oracle 不断捐赠代码,越来越多的功能将被集成到 NetBeans 中。NetBeans 10.0 将看到对 Javascript 和 Groovy 支持的回归,并支持 JUnit 5 。

    PHP

    NetBeans 10 的另一个重要补充是它再次支持 PHP,包括 PHP 7.0-7.3、PHPStan 和 Twig ,并提供对 PHP 的编辑和调试功能。

     

    更多详情可查阅:

    https://cwiki.apache.org/confluence/display/NETBEANS/Apache+NetBeans+10.0+New+and+Noteworthy

    Marko v4.14.8 发布,快速友好的 UI 库

    $
    0
    0

    Marko v4.14.8 已发布,Marko 是一个快速、友好的 UI 库,由 eBay 开源,旨在让构建 web 应用更有趣。

    特性

    • 简单 —— 只要了解 HTML、CSS 和 Javascript,你就会用 Marko ;

    • 快速 —— 通过流传输和微型(〜10kb gzip)运行时让加载更快

    • 创新 —— 从简单的 HTML 模板到强大的 UI 组件

    • 安全 —— 正在为 eBay.com 等高流量网站提供支持

    更新内容:

    • Add migrator from w-body to dynamic tag. #1199

    • Add migrator from dynamic attributes to spread attributes. #1202

    源码下载:

    Plotly.js 1.43.1 发布,JavaScript 图表库

    $
    0
    0

    Plotly.js 1.43.1 已发布,这是一个开源的 JavaScript 图表库,基于 d3.js 和 stack.gl 。Plotly.js 是一个高层次的、描述性的图表库,自带超过30种图表类型,包括 3D 图表、统计图表、SVG 地图等。

    Plotly.js 1.43.1 包含以下修复:

    • Fix z-axis auto-type for cartesian + gl3d graphs (bug introduced in 1.43.0) [#3360]

    • Fix multicategory axis coordinate sorting [#3362]

    • Fix multicategory y-axes clearance [#3354]

    • Fix contour label clipPath segments for reversed axes [#3352]

    • Fix axis autorange on double-click on graph fixedrange:true [#3351]

    源码下载:

    Redisson 3.10.0 和 2.15.0 发布,Redis 客户端

    $
    0
    0

    Redisson 3.10.0 和 2.15.0 已发布,Redisson 是架设在 Redis 基础上的一个 Java 驻内存数据网格 (In-Memory Data Grid) 。

    Redisson 在基于 NIO 的 Netty 框架上,充分利用了 Redis 键值数据库提供的一系列优势,在 Java 实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。

    两个版本的更新内容相同,包含以下新特性:

    • 新的 Hibernate 缓存实现

    • 支持 Hibernate 5.3

    • 新增 TypedJsonJacksonCodec

    • RMap 新增 getCountDownLatchgetSemaphoregetPermitExpirableSemaphoregetFairLock 方法

    • RSet 新增 getCountDownLatchgetSemaphoregetPermitExpirableSemaphoregetFairLock 方法

    • 新增 RTopic.countSubscribers 方法

    • 新增 JndiRedissonFactory 和 Tomcat JndiRedissonSessionManager

    • 支持在配置文件中使用环境变量

    • 支持 Spring Data Redis 2.1.x

    • 支持 Spring Boot Starter 2.1.x

    • 支持各种不同的监控系统

    • ……

    完整更新内容可查阅发行列表

    下载地址:

    Docz 0.13.7 发布,高效、零配置的事件记录工具

    $
    0
    0

    Docz 0.13.7 已发布,这是一个事件记录工具,可以让你不用去做很多不必要的操作和设置,就能够用你自己喜欢的风格来表达和呈现你想要记录下来的东西。

    Docz 基于 MDX ,有许多内置的组件可以帮助你记录你的事情。它同时支持添加插件,以便于通过 Docz 流程和数据管控很多事情。

    Docz 0.13.7 包含以下 bug 修复:

    • docz-core: default value for arguments (5644343)

    • docz-core: happypack plugin name (cbf7692)

    源码下载:

    Lerna v3.8.0 发布,多包存储库管理工具

    $
    0
    0

    将大型代码库拆分为独立的独立版本包对于代码共享非常有用。 然而,在许多存储库中进行更改是麻烦和难以跟踪的事情。为了解决这些(和许多其他)问题,一些项目将它们的代码库组织成多包存储库。 像 Babel、React、Angular、Ember、Meteor、Jest 等等。

    Lerna 是一个优化使用 git 和 npm 管理多包存储库的工作流工具,用于管理具有多个包的 JavaScript 项目。

    Lerna v3.8.0 更新内容:

    Bug Fixes

    • publish: Heighten dist-tag success log level to distinguish from noisy fetch logging (f1f0871)

    • publish: Unhide options shared with version command (09fccd3)

    Features

    • publish: Add --contents option (5e790e5), closes #1817 and a whole lot of others

    源码下载:

    ESLint 5.11.1 发布,JavaScript 代码检验工具

    $
    0
    0

    ESLint 5.11.1 已发布,这是一个小的修复版本,解决了在 no-useless-catch 中对可选的 catch 绑定的处理问题。#11205

    ESLint 是一个开源的 JavaScript 代码检验工具,相比 JSLint,ESLint 具有可配置性。其它跟  JSLint 的不同之处:

    • ESLint 使用 Esprima 来进行 javascript 解析

    • ESLint 使用 AST 来修改代码模式

    • ESLint 是完全插件化的,每个规则都是一个插件,用户可以在运行时增加更多的插件

    源码下载:


    SeaweedFS 1.15 发布,高可扩分布式文件系统

    $
    0
    0

    SeaweedFS 1.15 已发布,这是一个简单且高度可扩展的分布式文件系统,主要有两个目标:存储数十亿的文件和快速响应!

    更新内容:

    • weed filer, volume, HCFS

      • 报告原始文件大小

    • Hadoop client (HCFS)

      • 修复 #793 第一级目录创建

      • 修复 #797 列表目录

    • weed volume

      • 改进对 gzippable 内容的检测

      • 禁止 ".gz" 自动解压

      • 修复 #793 清理“.idx”文件

    • weed backup

      • 通过 gRpc streaming 推送更改

      • 修复 compact map 的重复问题

    更多详情和下载地址可查阅发行列表

    Ray 0.6.1 发布,高性能分布式执行框架

    $
    0
    0

    Ray 0.6.1 已发布,这是 UC Berkeley RISELab 针对机器学习领域开发的一种新的分布式计算框架,它使用了和传统分布式计算系统不一样的架构和对分布式计算的抽象方式。RISELab 实验室的前身也就是开发 Spark/Mesos 等的 AMPLab 实验室,Ray 也具有比 Spark 更优异的计算性能。

    部分更新内容如下:

    • Core:修复 Plasma TensorFlow operator 的内存泄露问题

    • Core:修复与 TensorFlow 和 PyTorch 的兼容性问题

    • Core:繁杂代码重构和清理

    • Core:文档改进

    • Core:稳定性改进

    • RLlib:性能改进

    • RLlib:报错提醒改进

    • ……

    完整更新内容请查阅发行说明

    源码下载:

    在线图表编辑工具 draw.io 10.0.9 版本发布

    $
    0
    0

    draw.io 10.0.9 已发布,更新内容如下:

    • 修复桌面未保存文件的同步问题

    • 将 Google Slides 添加至 “Embed”菜单

    • 忽略 checksum 中的 page 名称

    • 修复对丢失页面的处理

    以往版本记录可查阅更新日志

    draw.io 是一款在线图表编辑工具, 可以用来编辑工作流、BPM、org charts、UML、ER图、网络拓朴图等。

    下载地址:

    NovalIDE 1.1.4 发布,新功能新特性

    $
    0
    0

    NovalIDE 1.1.4 正式发布。

    软件官方网址:http://www.novalide.com

    此次版本发布增添如下新功能:

    1. 可停靠,可吸附式的选项卡文档窗口

    2. 添加对c/c++语言的注释模板支持

    3. 调试运行输出窗口右键菜单添加查找和导出文本功能

    4. 断点调试窗口支持标准错误输出为红色,标准输出显示为黑色

    5. 工程和资源视图添加工具栏

    6. 支持文档主题设置,选项卡文档方向设置等

    7. 支持全屏显示以及关闭全屏显示

    8. 文档右键菜单支持最大化和恢复文档窗口

    9. 支持恢复默认窗口布局

    10. 添加中文的每日提示支持

    11. 支持软件安装在中文路径

    12. 支持同时打开多个文档

    13. pip支持安装包时选择最优源

    14. 优化了软件其它的一些性能并修复了一些BUG

    下面是其一些软件新增的功能截图:

    Spring Cloud Alibaba 发布第二个版本,Spring 发来贺电

    $
    0
    0

    还是熟悉的面孔,还是熟悉的味道,不同的是,这次的配方升级了。

    今年10月底,Spring Cloud联合创始人Spencer Gibb在Spring官网的博客页面宣布:阿里巴巴开源 Spring Cloud Alibaba,并发布了首个预览版本。随后,Spring Cloud 官方Twitter也发布了此消息。

    时隔 51天,Spencer Gibb再次在Spring官网的博客页面:point_up_2:宣布:Spring Cloud Alibaba发布了其开源后的第二个版本0.2.1,随后,Spring Cloud 官方Twitter也转发了此消息。圣诞节的前一周,Josh Long向他的老朋友许晓斌发来贺电:

    小编翻译:

    听闻阿里巴巴官方宣布使用Spring Cloud,我开心的一晚上没睡着,下周三我会在Spring Tips小视频里介绍Spring Cloud Alibaba。

    圣诞快乐,老哥!

    爱你:heart_eyes:

    视频地址:https://spring.io/blog/2018/12/26/spring-tips-bootiful-alibaba

     

    一、新版本概要

    • 增加了两个新的模块, spring-cloud-alibaba-schedulerx 和 spring-cloud-stream-binder-rocketmq 。

    • 在 spring-cloud-alibaba-nacos 和 spring-cloud-alibaba-sentinel 中增加了一些新的 feature 。

    • 修复了之前版本的一些 bug 。

       

    注意: 版本 0.2.1.RELEASE 对应的是 Spring Cloud Finchley 的版本。这次发布也包含了一个适配 Spring Cloud Edgware 的版本 0.1.1.RELEASE,版本 0.1.1.RELEASE 也包含了 0.2.1.RELEASE 中新增的组件和特性。

     

    Spring Cloud Alibaba RocketMQ

    • 适配了 spring cloud stream 对于 message 抽象的 API。

    • 支持事务消息。

    • Consumer 端支持以 tags、SQL表达式过滤消息。支持顺序、并发以及广播消费模式。

    Spring Cloud Alibaba SchedulerX

    • 提供了秒级、精准、高可靠、高可用的定时任务调度服务。

    • 提供了丰富的任务执行模型,包括单机执行,广播执行,以及子任务的分布式执行。

    Spring Cloud Alibaba Nacos Config

    • 将Nacos Client 的版本升级到 0.6.2 版本。

    • 支持从多个 dataid 和 groupid 中获取和监听配置,并支持优先级指定。

    • 优化了 动态监听的逻辑,只有配置了动态刷新的配置项才会实时刷新。

    Spring Cloud Alibaba Nacos Discovery

    • 将Nacos Client 的版本升级到 0.6.2 版本。

    • 支持在 Nacos Console 端将服务实例设置成不可用状态,服务发现会自动过滤此节点。

    • 支持服务发现在初始化时不使用本地缓存。

    Spring Cloud Alibaba Sentinel

    • 支持 Feign,兼容了 @FeignClient 所有的属性,包括 fallback、fallbackFactory。

    • 支持 热点参数限流和集群限流。

    • 重构了 ReadableDataSource 的设计,提供了更友好的配置 Sentinel 规则持久化的方式。

    • 优化了 Sentinel 对于 RestTemplate 的降级后的处理。

    • 调整并添加了一些 Sentinel 配置信息对应的属性,如日志目录,日志文件名等。

     

    二、新版本背后的思考

    Spring Cloud Alibaba Nacos Discovery

    Nacos Discovery 在这个版本最大的更新就是支持在初始化的时候不使用本地文件缓存,目前初始化的时候已经默认不使用本地文件缓存。

    为什么要有缓存?首先我们来了解一下本地缓存的概念,为什么需要这个本地缓存?

    我们都知道,服务注册与发现应该只是服务调用中的辅助性的一个环节,而不是一个关键的环节。一个良好的服务注册与发现的设计,需要保证以下两点。

    • 服务注册与发现只是旁路,不应该参与具体的调用过程。

    • 在服务的运行过程中,即使服务注册中心偶然发生异常宕机后,也尽量不影响正常的业务调用。

    要实现以上两点,缓存就不可或缺,而为了适应不同的场景,缓存又可以分成内存缓存和本地文件缓存,他们的概念和适用场景如下。

     

    内存中的缓存

    将服务提供者列表维护在内存中,每次调用时直接从内存中的列表获取节点即可。内存缓存通过定时任务更新,或者在收到服务注册中心的推送之后再更新。确保了即使在服务注册中心宕机的情况下,也能保证服务仍能正常调用。

     

    本地文件缓存

    将上述提到的内存中的缓存,保留在本地的某个文件中,这样在调用服务注册中心失败的时候,可以从本机的文件缓存中获取服务提供者列表。这样就保证了在服务注册中心宕机的情况下,应用在重启后也能找到服务提供者。

     

    为什么要关闭

    有了以上背景知识后,读者可能会有疑问,既然缓存这么好,你们为什么默认要把它置为默认关闭呢?

    我们在发布出第一个版本之后,很多用户反馈,为什么我服务下线之后还是有节点,仍旧可以被查询到呢?这样导致我这个监控数据完全不准,你们这个有 bug,完全不对。其实这是阿里巴巴在多年业务积累的经验,对于服务发现来说,一个即使是已经过时的节点,也比没有任何数据好。而且还有可能其实这个服务只是和服务注册中心失去了心跳,但是应用本身是正常的。

    当然,这也暴露了我们设计中存在的一些问题,没有把服务发现本身,以及缓存的分层给做好,两者糅合在一块。所以在这一次的版本更新中我们还是选择适配开源标准,默认关闭了本地文件缓存,留了一个开关给用户自由选择。

     

    Spring Cloud Alibaba Nacos Config

    Nacos Config 在这个版本中有两个大的特性,支持了&ldquo;共享配置&rdquo;,修正了动态刷新的语义和行为。

     

    共享配置的实现

    在第一个版本还没发布到时候,社区里对配置管理中心的讨论就没停止过,其中听到最多的反馈应该就是支持多个应用共享一个配置。我们也通过 github issue 的方式,征集了很多意见,详情见 #12 , #141。

    后来我们将这个模型抽象了一下,认清这些需求本质是一个应用可以从多个 DataID 和 GroupID 组合中获取配置,并且这些配置还可以单独指定优先级和是否动态刷新。

    最后我们推荐了这种使用方式,既保证了使用场景的灵活性,又保证了业务语义的明确性。更多详情可以参考 WIKI。

    # config external configuration    
    
    # 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新    
    spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties    
    
    # 2、Data Id 不在默认的组,不支持动态刷新    
    spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties   spring.cloud.nacos.config.ext-config[1].group=GLOBAL_GROUP    
    
    # 3、Data Id 既不在默认的组,也支持动态刷新    
    spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties   spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP    
    spring.cloud.nacos.config.ext-config[2].refresh=true    
    
    #优先级关系: spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,优先级越高。

     

    注意 data-id 的值必须带文件扩展名,文件扩展名支持 properties、yaml 和 yml。通过这种自定义扩展的配置项,既可以支持一个应用从多个配置项中获取数据,也解决多个应用间配置共享的问题。

    头脑风暴,@fudali 同学还提出了更加灵活的一种方式 #161,就是可以通过一个配置项来配置所有的 DataID 的信息,然后可以通过修改这个配置项,可以修改整体配置项的逻辑。

    这是一个非常好的想法,只不过这一期中我们没有实现,原因是这种方式太灵活了。我们认为配置管理其实是一件很严肃的事情,太灵活导致生产中变更比较不可控。

    虽然目前的逻辑也可以支持这种用法,但是我们并没有把这种模式当做推荐模式,后续如果社区有更多的反馈认为这是一个强烈的需求,欢迎提 PR。

     

    动态刷新的修正

    简单好用、实时可监控的动态刷新也许是 Nacos Config 相对于其他开源中间件相比最核心的优势了,不同于 Spring Cloud Config Server 必须使用 Spring Cloud Bus 才能实现动态刷新,Nacos Config 无需依赖其他任何中间件就可以实现实时动态刷新,而且推送成功与否和刷新历史还支持实时查询。

    但是我们发现在第一个版本中的实现发现两个问题:

    • 动态刷新的实现方式不对:不应该直接调用 Context.refresh() 方法,而是应该 publish 一个 RefreshEvent。

    • 是否动态刷新的语义有误:对于那些被标记为不动态刷新的配置项来说,只是修改他们的时候不会触发动态刷新。但是当其他支持动态刷新的配置项触发了动态刷新时,应用的 Context 仍旧会去获取那些被标记为不动态刷新的配置项的内容,也就意味着这些配置项有可能被连带刷新了。

    在这个版本中,我们修复了这两个问题。

    首先,动态刷新不再是直接去调用 ContextRefresher.refresh() 方法,而是 publish 了一个 RefreshEvent,让 spring-cloud-commons 里的 RefreshEventListener 去触发这个 ContextRefresher.refresh() 方法。

    其次,我们修正了动态刷新的语义后,这一次是真正做到了,只有 refresh 属性为 true 的配置项,才会在运行的过程中变更为新的值,refresh 属性为 false 的配置项再也不用担心应用在运行的过程中发生莫名其妙的变更了。

    更深入一点,在上个月 SpringOne Tour 中,我们和 Spring Cloud 的创始人 Spencer 聊到 Spring Cloud 的 Context.refresh() 成本太高,会刷新整个 Spring Context。他反复强调了两次 Context.refresh() 只对 @RefreshScope 和 @ConfigurationProperties 有效,成本一点也不高。

    之前我们接收到很多社区的反馈都是 Nacos Config 动态刷新支不支持 xxxx,支不支持 xxxx。之前我们都是回答只支持 @RefreshScope 和 @ConfigurationProperties ,如果他内置没有支持,那就得自己加上相应的注解。

    今天我们可以很愉快地回复,他监听了 RefreshEvent 也能直接支持。而且如果添加 @RefreshScope 和 @ConfigurationProperties 都不满足你的需求时,可以通过实现自己的 RefreshEventListener 更多高级的玩法。

     

    Spring Cloud Alibaba Sentinel

    Sentinel 在这个版本中有三个大的特性:全面支持 FeignClient ,完善了 RestTemplate 的支持,添加了热点限流、集群限流。

     

    FeignClient 集成 Sentinel

    其实在这之前,Sentinel 支持 FeignClient 已经设计了很久了,之前我们的想法做一个兼容性较强的方案,支持 Sentinel 和 Hystrix 在 FeignClient 中同时使用,尽量做到对原有应用的侵入性做到最小。

    这个方案我们也思考调研了很久,但是实现难度确实比较大,需要修改 FeignClient 的代码才能实现两者共存。正好前段时间在 Spring Cloud 届最大的新闻就是 Hystrix 宣布不在维护了,于是我们就换了一个思路,直接使用 Sentinel 替代 Hystrix,不再去追求支持两者共存。

    我们实现了自己的 Feign.Builder,在构建的 FeignClient 执行调用的过程中,通过 SentinelInvocationHandler 完成 Sentinel 的流量统计和保护的动作。如果想使用 Sentinel 为 FeignClient 限流降级,首先需要引入 sentinel-starter 的依赖,然后打开 Sentinel 限流降级的开关 feign.sentinel.enabled=true ,就完成了 Sentinel 的接入。如果需要使用更加定制化的功能,则需要在 @FeignClient 添加 fallback 和 configuration 这些属性的配置。

    注意 @FeignClient 注解中的所有属性,Sentinel 都做了兼容。

     

    RestTemplate 集成 Sentinel

    Spring Cloud Alibaba Sentinel 支持对 RestTemplate 的服务调用使用 Sentinel 进行保护,补全了 Hystrix 这一块的空白。接入的方式也不复杂,在构造 RestTemplate bean 的时候需要加上 @SentinelRestTemplate 注解,然后在控制台配置相应的规则即可。

    在触发了限流降级时,默认的处理方式是返回 RestTemplate request block by sentinel 信息。

    • 如果想自定义被限流之后的处理方式,还可以添加 blockHandlerClass,blockHandler 分别定制被限流后的处理类以及对于的处理方法。

    • 如果想自定义被降级之后的处理方式,还可以添加 fallback,fallbackClass 分别定制被降级后的处理类以及对于的处理方法。

    RestTemplate 的限流降级 ?Sentinel 也承包了!

     

    热点参数限流和集群限流

    首先解释一下什么是热点参数限流和集群限流。

    热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

    集群流控主要解决的问题是:当我们需要控制整个集群流量总量,但是单机流量可能会不均匀,如果是单机维度去限制的话会无法精确地限制总体流量,因此需要引入集群维度的流量控制。

    Sentinel v1.4.0 的 新功能 ,也能第一时间愉快地在 Spring Cloud Alibaba 上使用了。

     

    三、新组件

    Spring Cloud Alibaba RocketMQ

    Spring Cloud Stream 是一个用于构建基于消息的微服务应用框架,它基于 SpringBoot 来创建具有生产级别的单机 Spring 应用,并且使用 Spring Integration 与 Broker 进行连接。它提供了消息中间件的统一抽象,推出了 publish-subscribe、consumer groups、partition 这些统一的概念。

    RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。具有以下特点:能够保证严格的消息顺序、提供丰富的消息拉取模式、高效的订阅者水平扩展能力、实时的消息订阅机制、亿级消息堆积能力。

    在这次的 Spring Cloud Stream Binder RocketMQ 的实现中,我们适配了 Spring Cloud Stream 对于 message 抽象的 API,支持了 RocketMQ 的事务消息。消息订阅时支持以 tags、SQL 表达式过滤消息,同时还支持顺序、并发、延迟以及广播消费模式。

     

    Spring Cloud Alibaba SchedulerX

    SchedulerX 是阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务,同时提供分布式的任务执行模型,如网格任务,网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

     

    简单易用的轻量分布式任务调度

    您不需要关心调度逻辑,只需要在在 JobProcessor 接口的实现中添加业务逻辑即可,然后在自主运维控制台配置上一个 Job 即可完成使用。

     

    高可用的分布式任务

    不管是 SchedulerX 服务端还是客户端都是分布式架构设计,任务可以在多台客户端机器里的任何一台机器执行,如果客户端出现宕机的情况,服务端会自动选择正常运行的客户端去执行 Job,每个 Job 在服务端的不同机器均有备份,SchedulerX 服务端任意宕掉部分机器仍能保证 Job 正常调度。

     

    友好的用户界面

    SchedulerX 提供了非常友好的页面方便您创建、删除或修改 Job,提供了立即触发执行一次的功能,方便您测试以及关键时刻手动立即执行一次,还提供了历史执行记录查询的功能,您可以看到任何一个 Job 过去 100 次的历史执行记录。

     

    功能强大 
    提供了秒级、精准的定时任务调度服务,且提供了丰富的任务执行模型,包括单机执行,广播执行,以及子任务的分布式执行。

     

    四、What's Next?

    Spring Cloud Alibaba Cloud SLS 针对日志类数据的一站式服务,在阿⾥巴巴集团经历大量大数据场景锤炼⽽成。您⽆需开发就能快捷地完成日志数据采集、消费、投递以及查询分析等功能,提升运维、运营效率,建立 DT 时代海量日志处理能力。

    Spring Cloud Alibaba Dubbo Dubbo 是一款流行的开源 RPC 框架,我们会把 Dubbo 整合到 Spring Cloud Alibaba 中,让大家在开发 Dubbo 时也能享受到 Spring Cloud 带来的便利。

     

    致谢

    Spring Cloud Alibaba 从开源建设以来,受到了很多社区同学的关注。社区的每一个 issue ,每一个 PR,都是对整个项目的帮助,都在为建设更好用的 Spring Cloud 添砖加瓦。

     

    我们真心地感谢为这个项目提出过 Issue 和 PR 的同学,特别是这些 contributor:

     HaojunRen、xiejiashuai、mengxiangrui007 

    我们希望有更多社区的同学加入进来,一起把项目做好。

    还要特别感谢文档团队的倾芸,她帮忙将我们所有的 Reference Doc 翻译了英文,为Spring Cloud Alibaba 的国际化进程铺平了道路。

    Viewing all 44809 articles
    Browse latest View live