Quarkus 2.8.0引入了细粒度的交易API
红帽公司发布了Quarkus 2.8.0,该版本默认提供与RESTEasy Reactive REST层和GraalVM 22.0的集成。细粒度的编程式事务API为事务提供了更多控制。
Quarkus 1.11引入了 RESTEasy Reactive集成,这是一个JAX-RS的反应式实现,用Vert.x实现。在这个版本中,RESTEasy Reactive现在是默认实现,支持阻塞式和反应式调用,根据端点的返回类型自动选择。例如,返回一个 **Student**使得端点成为阻塞式,而返回一个 **Uni<Student>**则使端点成为反应式。直到最近,默认的REST层是RESTEasy Classic,在手动添加到项目的依赖关系后,它仍然可用。
所有的 quarkus-resteasy*REST服务器的依赖项都应该被替换成 **quarkus-resteasy-reactive***依赖关系,但不包括 **quarkus-resteasy-mutiny**依赖关系,因为该功能已经集成在RESTEasy Reactive中。之后的各种注解,如 org.jboss.resteasy.annotations.jaxrs.QueryParam,应该由 **org.jboss.resteasy.reactive***注释,如 org.jboss.resteasy.reactive.RestQuery.
同样地,REST客户端的实现也应该用新的注释替换 **quarkus-rest-client***的依赖性,用新的 **quarkus-rest-client-reactive***依赖关系。
RESTEasy Reactive迁移指南和参考指南提供了进一步的迁移指导。
QuarkusTransactionAPI现在提供了一个程序化的API来控制交易,通过明确地调用 **begin()**和 **commit()**方法来控制交易:
QuarkusTransaction.begin();
// implementation
QuarkusTransaction.commit();
该事务与CDI请求范围绑定,每当有异常破坏请求范围时就会自动回滚。另外,也可以用一个超时来启动事务,并在超时发生时回滚:
QuarkusTransaction.begin(QuarkusTransaction.beginOptions()
.timeout(42));
// implementation
QuarkusTransaction.rollback();
Lambda范围的事务通过在事务中执行Runnable提供了另一种选择:
QuarkusTransaction.run(() -> {
// implementation
});
另外,也可以使用一个支持异常处理和枚举语义的Callable解决方案。 DISALLOW_EXISTING, JOIN_EXISTING, SUSPEND_EXISTING, REQUIRE_NEW (默认):
int answer = QuarkusTransaction.call(QuarkusTransaction.runOptions()
.timeout(21)
.exceptionHandler((throwable) -> {
if (throwable instanceof RuntimeException) {
return RunOptions.ExceptionResult.COMMIT;
}
return RunOptions.ExceptionResult.ROLLBACK;
})
.semantic(RunOptions.Semantic.REQUIRE_NEW), () -> {
// implementation
return 42;
});
Quarkus 2.7发布时已经支持GraalVM 22.0,现在默认使用,在构建本地镜像时提供了更好的日志记录。
Quarkus现在支持OpenID Connect(OIDC)的密钥证明(PKCE),这是OAuth 2.0协议之上的一个身份层。PKCE是对OAuth 2.0的扩展,以减轻公共客户端请求访问令牌时的安全威胁。
维护者决定将AssertJ从材料清单(BOM)中删除,因为新版本经常破坏二进制兼容性。项目现在应该明确声明AssertJ3.22.0,目前是最新版本。
当使用Elasticsearch扩展时,Elasticsearch Dev Services在开发和测试模式下运行测试时,会自动启动Elasticsearch容器,除非明确禁用,比如说。 **quarkus.devservices.enabled**设置为 false.
Quarkus提供了一个迁移指南,以方便过渡到2.8.0版本。