ActFramework 1.8.32 发布 - 高质量的 Java Web 应用框架
1. ActFramework 1.8.32
ActFramework 是一款高质量的 Java Web 应用框架. 最新的 1.8.32 版本带来了 20 项错误修复和更新. 其中值得关注的有:
1.1 通过 HTTP 访问 CLI 命令 #1305
熟悉 Act 的用户都知道在 Act 提供了大量的内置 CLI 命令, 也提供了非常方便的 CLI 命令创建机制. 如果需要在后端创建一个用户, 只需写出这样的代码即可:
@PropertySpec("id") @Command(name = "user.create", help = "create user") public User create( @Required("specify user email") String email, @Required("specify user password") char[] password, @Optional("specify user role") Role role ) { User user = findByEmail(email); badRequestIf(null != user, "email[%s] registered already", email); user = new User(email); user.setPassword(password); user.role = null == role ? Role.SUPER_USER : Role.RESTRICTED_USER; return save(user); }
使用这个命令则需要在后台通过 telnet 或者 nc 等工具访问服务器的 CLI 服务端口:
这个机制非常方便但在开发时链接 CLI 服务端口会有个问题, 就是服务器在代码更新触发热加载的时候断开 TCP 链接, 因此调试命令需要重新连上 CLI 服务端口, 有点小麻烦. 在 1.8.32 中我们带来了方便的 CLI Over Http 服务机制, 让开发人员仅在开发时通过 /~/cmd
来访问命令:
这样开发人员无需在后台不停链接 CLI 端口即可随时通过 HTTP 网页来调试 CLI 命令.
1.2 增强 SampleData API, 允许在创建 List/Set 的时候指定创建 Mock 数据的数量 #1301
ActFramework 的 SampleData 提供了强大的 Mock 数据生成 API, 在这个版本中我们进一步增强了这个特性, 可以指定创建 Mock 数据的条目了.
示例代码:
public static class User { public String firstName; public String lastName; public String email; } @GetAction("users/mock") public List<User> test() { return SampleData.generateList(User.class, 7); }
测试:
1.3 从浏览器直接访问返回 Iterable 类型数据的端点, 自动以 HTML table 形式生成响应 #1298
这个增强的结果在上面已经显示出来了. 以前的版本从浏览器访问直接数据返回端点都是以 JSON 形式显示结果的. 看官可能会提问题了, 如果我通过 ajax 形式访问数据端点也会拿到 HTML table 形式的响应吗? 答案是在 ajax 请求中设定好 Accept=application/json
ActFramework 会以 JSON 形式发回数据的. 拿刚刚上面的例子来测试:
较真的看官可能又要问了, 如果我就想在浏览器中看 JSON 数据而不是 HTML table 数据怎么办. 这个也不是问题, 使用 _accept=json
请求参数即可:
1.4 HTML-Table 增强 - 表头始终处于页面顶部
1.5 IStorageService 对错误处理的增强 #1295
以前当 IStorageService 发生存储项目未找到, 或者访问受限的错误, 都会导致发出 500 服务器错响应. 现在 ActFramework 能更好地处理这些错误情况, 当发生资源未找到时, 会处理为 404 响应. 访问受限会处理为 403 响应.
1.6 异步结果处理增强 - 使用最初指定的 Content-Type 来生成异步处理结果 #1286
在 ActFramework 中如果有工作是耗时较长的, 比如某些数据报表生成, 可以采用异步处理方式.
示例代码:
@Async @ReportProgress @GetAction("/users/async") public List<User> simulateLongTimeOperation(ProgressGauge gauge) { final int sz = 100; List<User\> userList = new ArrayList<>(sz); gauge.updateMaxHint(sz); for (int i = 0; i < sz; ++i) { $.sleep(50); userList.add(SampleData.generate(User.class)); } return userList; }
访问该接口:
以前的版本无论用那种请求类型访问最后都只能看到上面的结果 - JSON 形式生成的响应. 在这个版本里我们缓存了最初的请求响应类型, 并在最后生成结果响应的时候应用请求的响应类型. 下面是演示:
用 html-table 方式访问 /users/async
:
用 xlsx 方式访问 /users/async
:
2. Act-Beetl 1.7.2
更新 beetl 至 3.0.19.RELEASE
3. Act-BeetlSQL 1.8.2
更新 beetlsql 至 2.12.20.RELEASE
4. Act-Morphia 1.9.0
Act-morphia 是转为 ActFramework 应用程序设计的 MongoDB 访问库. v1.9.0 带来的改进有:
4.1 Dao.update API 改进:
下面的情况如果 firstName
为 null
, 则会调用 mongodb 的 $unset 操作删掉 firstName 字段:
4.2 加载 Entity 的时候自动初始化集合类型字段
假设你有下面的 Model 类型:
@Entity("emp") public class Employee extends MorphiaModel<Employee> { public String firstName; public String lastName; public List<AuditRecord> auditRecords; }
从数据库中 load 一个 Employee 实例, 假设该记录没有 auditRecords
数据, 以前该字段会是 null
, 现在则自动将 auditRecords
字段设置为空 List
. 这样做的好处是避免对 auditRecord
字段进行操作的时候还需要进行空值检查.
5. Act-Excel 1.9.0, Act-Excel-java7 1.9.0
5.1 支持不同的输出主题
示例代码:
默认主题:
春意盎然:
五十度灰:
金秋:
5.2 提供帮助方法让应用自己控制 Excel 文档生成
群里有人提出需要定时生成 Excel 文档, 不希望还需要从 HTTP 走一遍, 于是将内部的逻辑抽取出来提供了下面的静态方法方便程序员使用:
ExcelDirectRender.generateExcelFile(Object data, File targetFile);
6. OSGL-Tool 1.24.0
osgl-tool 是一套 Java 工具库, ActFramework 中大量使用了 osgl-tool 来简化开发. v1.24.0 版本带来一下改变:
6.1 UserAgent
使用 LFU Cache 来替代 HashMap #234
UserAgent 字串解析是一件耗时的工作. 因此我们总是希望将结果缓存下来. 以前的版本采用简单的 HashMap 来缓存 UserAgent 解析结果. 这个速度当然很快, 然而带来的麻烦是 UserAgent 的种类基本上是一个开发的数量, 根据 whatismybrowser 的统计, 有超过 2400 万的不同的 UserAgent 字串. 随着时间的推移, HashMap 的 UserAgent 缓存将吃光服务器上的堆空间.
这个版本中我们使用了 LFU (最低访问次数) 缓存来存储 1000 个 UserAgent 解析结果, 这样大多数常用的 UserAgent 会被缓存起来, 既满足了性能的要求, 也不会对服务器堆空间带来长期的压力.
6.2 Crypto
增加 RSA 方法 #233
在 Crypto
工具类上增加 RSA 的方法:
public static KeyPair generateKeyPair(); public static KeyPair generateKeyPair(int keysize); public static String encryptRSA(String value, byte[] publicKey); public static String encryptRSA(String value, String urlSafeBase64EncodedPublicKey); public static String decryptRSA(String value, byte[] privateKey); public static String decryptRSA(String value, String urlSafeBase64EncodedPrivateKey);
6.3 UserAgent
- 支持 Microsoft Edge #230
6.4 添加 S.acronym(CharSequence)
静态方法
String a = S.acronym("OpenSourceGeneralLibrary"); // a = 'OSGL'
7. 总结
以上就是本次更新中值得关注的部分. 最后给自己的博客做一个友情链接, 请大家观赏一下 如何用不到 70 行 Java 代码撸一个简单的文件上传服务
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2020 年 3 月 5 日凌晨,码云主数据库切换问题记录
2020 年 3 月 5 日,农历二月十二,惊蛰,宜搬家、安机械。由于主数据库磁盘容量告急,我们决定将主数据库迁移至新的物理设备。上一次迁移是在 2018 年,我们从 SAS 磁盘迁移至 SSD 磁盘,当时对容量做了评估,但是国内开发者的热情和敬业精神十足,很快把我们的数据库磁盘塞满了。 因此我们决定再次迁移主数据库,这次我们准备了更大的磁盘,更好的设备。但是天有不测风云,新冠病毒疫情的扩散打乱了我们的计划,无限期延迟开工、交通管制等等因素导致我们的迁移计划不得不延后执行。 但是迁移迫在眉睫,我们不得不执行 plan B。 由于 SSD 设备无法就位,我们决定临时使用 SAS 设备作为新的数据库服务器。我们将服务器初始化、调优、部署应用、开始实时增量同步数据。 前期的准备工作有条不紊的进行着,看似风平浪静,然而一场悲剧正悄然酝酿。 2020 年 3 月 5 日凌晨 1:00 迁移工作进行到切换应用数据库连接地址这一步,此时我们需要对应用进行热重启,期间服务会有间歇性不可用,所以我们提前发出了公告。 我们确保数据一致后开始对后端应用配置的分发和热重启,事情进展顺利,数据库连接地址切换完成...
- 下一篇
手把手系列 | OceanBase 2.2 版本安装体验——OCP 2.3
OB君:好消息!「 OceanBase 2.2 版本 」正式上线官网啦!(点击阅读原文即可直接下载)OceanBase 2.2版本是成功支撑2019年天猫双11大促的稳定版本,同时也是用于TPC-C测试且荣登TPC-C性能榜首的版本。我们将在接下来的时间里为大家持续推出 “OceanBase 2.2 手把手系列” ,将手把手带大家一起体验OceanBase 2.2的强大功能。欢迎持续关注! 1. 引言 OceanBase 2.2版本相关软件包近期已经通过OceanBase官网提供,其中包括一个OceanBase数据库产品、OceanBase自动化运维产品(OCP)的安装文件和相关容器镜像。官网上提供的OceanBase 2.2版本可免费用于学习、开发和测试环境使用,功能上跟商用版本并没有特别大的区别。 2. 安装规划 OceanBase数据库产品是必须安装的,自动化运维产品(OCP)不是必须但是建议安装。如果不安装OCP,则需要手动安装OceanBase数据库产品,详情参考《OceanBase 2.x体验:手动搭建OceanBase集群》。 官网下载文件里包含OceanBase 2.2...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Hadoop3单机部署,实现最简伪集群