重磅! Act 1.9 发布 - 弃用 Java7,支持 Java 8 到 14

开源老码农
 开源老码农
发布于 2020年06月29日
收藏 12

大家好, 我是老码农老罗。很高兴和大家分享 ActFramework 1.9 的发布新闻.

对于还不了解 ActFramework 的小伙伴, Act 是一款 Java Web 应用开发框架. 在开发体验, 表达力以及运行时性能等方面有很强的优势. 上周末老码农刚刚做了 Act 的第一个分享直播, 录屏已登录 B 站: https://www.bilibili.com/video/BV1iK411n7iv/.

下面我们来看看 Act-1.9 带来了那些改进/修复:

1. 弃用 Java7 并支持 Java8 ~ Java14

ActFramework 1.9 带来了 21 项改进/错误修复. 其中最主要变动是 支持 Java9 ~ Java14. 同时放弃对 Java7 的支持. 这项改进支持开发使用 Java9 以上的新语言特性以及 JDK 中的新方法. 同时还支持开发和部署环境的任意搭配, 意味着开发者可以自由地选择开发环境和部署环境:

  • 使用 Java8 开发的应用可以部署到 Java8 以及 Java9+ 的环境中运行
  • 使用 Java9+ 开发的应用可以部署到 Java8 以及 Java9+ 的环境中运行

2. 配置加载的改进

另一个较大改进在于配置文件的加载逻辑. 包括

#1318 从远端服务器加载配置

详情请参见 issue 其中定义了如何实现远端服务器以及安全通信.

#1345 允许应用定义自己的配置加载逻辑

应用只需要定义一个提供一下方法的类:

public Map<String, Object> loadConfigurations();


并用 conf-loader 指定该类名即可. Act 将在处理正常的配置加载以及远端服务配置加载(如果存在)之后调用应用及定义配置加载逻辑.

3. 其他值得注意的改进包括

osgl-tool 依赖更新到 1.25.0.

这个版本实现了一个很多小伙伴长期要求需求: 为单字母名字空间提供别名. 下面是单字母名字空间的别名印射表:

  • $ -> Lang # 这是很早就存在的别名
  • C-> CollectionUtil
  • S -> StringUtil
  • E -> ExceptionUtil
  • N -> NumberUtil

#1337 允许递归加载测试场景文件

以前的版本只能加载 src/test/resources/scenarios 目录下直接的测试场景文件 (该目录下任何后缀为 .yml 的文件). Act 1.9 支持递归加载该目录下任意层子目录的 .yml 文件, 方便测试场景文件的管理. 对于不了解 ActFramework 自动测试支持的小伙伴, 这里是传送门.

#1336 允许在请求处理函数中注入另一个控制器的实例

用过 Act 的小伙伴都知道, Act 对请求参数绑定的支持已经是近乎 bug 的存在了. Act 1.9 的这个改进进一步增强了这方面的支持. 改进源自老码农自己的一个实际项目. 某个项目中用于登录注册的 Authenticator 控制器类定义了一组绑定到 Session 变量的字段. 另一个控制器的请求处理方法也需要使用这一组字段, 老码农不想重新列写所有的 @SessionVariable("a") String a 这样的代码, 因此干脆直接在参数列表里注入 Authenticator 实例. #1336 就是为这个需求服务的.

#1328 增强 HTTP Cache

这个增强也源自老码农的实际项目需求. 某项目服务需要发送的有些类型数据数量很大, 但并不常常变动. 因此我们的请求处理方法上使用了 @CacheFor 注解. 这个注解的意思是:

  1. 如果前端发来请求的 If-None-Match 头的值(上次发送响应的 E-Tag 头) 匹配本次计算出的 E-Tag 值, 则直接返回 304 Not Modified 响应. - 节省带宽
  2. 按照请求参数生成 Key 并放置进缓存. 如果前端请求没有 If-None-Match 头, 或者值与 E-Tag 值不匹配, 则根据请求参数在缓存中查询, 找到则返回, 否则进入请求处理方法 - 从数据库中去数据并计算返回.

在老码农的特殊项目里, 我们对内存的要求比较紧, 因此不希望有中间缓存. #1328 的改进就是在 @CacheFor 注解中加上了 eTagOnly 这个变量, 如果设置为 true 则忽略掉中间缓存, E-Tag 匹配不上直接进入请求处理器拿数据

#1320 增加在开发模式下获得 System Properties 的服务端口

开发模式下常常需要检查某个 System.Properies 值, 这里我们提供了一个系统服务端口: /~/system/properties/{property-name} 来方便开发速查系统变量:

注意这个端口仅仅在开发模式下可用. 当应用运行在产品模式下时请求该端口会返回 404 Not Found

#1317 当批处理形式运行自动测试时随机选取未使用端口

Act 默认使用 5460 端口启动系统. 这个在开发环境下没有问题. 但如果公司部署了 CI 系统, 例如 Jenkins, 有可能多个应用项目或者单个项目的多个实例会同时启动(测试), 使用固定端口会带来端口冲突. #1317 的改进在于当以批处理方式运行自动化测试的时候随机选取未使用端口来启动项目:

#1313 改进路由出错时的报错信息

下面的代码会导致路由映射错误 - 同一个路由 (/foo) 映射到不同的请求处理方法上:

以前的版本不能很好地定位到出错地点:

新版本提供的错误信息对开发人员更一目了然:

以上是老码农给大家分享的 Act-1.9 带来的主要改进. 更多新版本的修复和改进信息可以在这里获得.

Act-1.9 的坐标, 在你的 pom.xml 文件中加入 parent:

  <parent>
    <groupId>org.actframework</groupId>
    <artifactId>act-starter-parent</artifactId>
    <version>1.9.0.1</version>
  </parent>

如果需要启动新的项目, 可以从这里选取你需要的项目类型.

最后, 感谢老用户对 Act 的信任与支持, 欢迎新人尝试 Act, 其他资源:

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:重磅! Act 1.9 发布 - 弃用 Java7,支持 Java 8 到 14
加载中

精彩评论

开源老码农
开源老码农
谢谢你的意见. 不过 Act 这个版本既没有大的架构变动, 也没有 break 以前的 API, 只是 Java7 被弃用了, 主要原因是有很多核心依赖, 包括 undertow 都没有在 java7 的版本上做包括修复安全问题的任何工作. 所以只能弃用. Java7 的用户只需要升级到 Java8 就能使用新版本, 应用无需做任何变动. 基于以上考虑, 就没有跳大版本
开源老码农
开源老码农
喜欢 SpringBoot 的也可以关注一下哈 :wink:
A
ACTom
讲道理,如此大一个不兼容的变更,跳到2.0才是比较合适的版本号吧?
李嘉图
李嘉图
以前喜欢play的同学可以关注一下,最好用的mvc框架,没有之一

最新评论(29

开源老码农
开源老码农
Act 支持多种 ORM,包括 BeetlSQL,JPA,Ebean,Morphia(MongoDB)。@淡神他们用的是 BeetlSQL
zhujingang
zhujingang
你们ORM用的是什么?
淡神
淡神
我司从18年从Play转到Act使用至今,支付项目,目前使用稳定。
开源老码农
开源老码农
老码农的东西都是先自己用, 从 2015 年底开始公司所有的后端项目都是 Act. 国内也有上线案例.
lemos
lemos
有在生产环境中使用吗?
渔民小镇
渔民小镇
垂涎三尺; 准备开撸
鬼面书生灬
鬼面书生灬
java8是个长期支持版
开源中国首席驯兽师
开源中国首席驯兽师
:+1: 越来越好用了
我有药
我有药
补充下中文文档:https://github.com/actframework/act-doc/blob/master/cn/index.md 文档还得完善完善啊
开源老码农
开源老码农
是的, 很多依赖, 包括 undertow, FastJSON 这些库都没有继续维护 Java7 的版本了
返回顶部
顶部