云原生Java框架有哪些呢

Java:8个用于云原生世界的Java框架】 云原生Java框架旨在支持可独立安装和重新启动的微服务群,它们通常在Docker或Podman等容器中发布,以实现最快的构建和安装。 阅读详情

我会先介绍Micronaut的基本特点,然后从一个简单的基于RESTful API的应用开始,将其重构为反应式非阻塞IO(reactive non-blocking IO,NIO),并介绍Micronaut如何支持基于微服务和无服务器架构的云原生开发。

Micronaut的特征
Micronaut提供了从Spring和Grails等传统框架处继承来的大量优势,其中的一项被称为“原生云原生(natively cloud native)”,即:为云环境从头开始构建。它的云原生能力包括:环境检测、服务发现、以及分布式跟踪等。

同时,Micronaut提供了一个全新的控制反转(inversion-of-control,IoC)容器。该容器能够使用提前(ahead-of-time,AoT)编译,来加快启动速度。此处的AoT是指,启动时间不会随着代码库的增多而增加。这对于无服务器和基于容器的部署来说,是尤其重要的。毕竟,在这些部署中,节点通常会按需进行关闭和启动。

作为一个多语言JVM框架,Micronaut目前支持Java、Groovy和Kotlin,并且即将支持Scala。

此外,Micronaut也支持响应式编程。开发人员可以在该框架内,使用ReactiveX或Reactor。其实,从 2021年7月发布的Micronaut 3开始,Reactor已被推荐使用了。值得注意的是,其新版本并没有将响应式库作为传递式依赖项。

1.开始使用Micronaut
我们可以通过SDKMan,将Micronaut轻松地安装在包括Linux和macOS在内的任何基于Unix的系统上。如果您使用的是Windows,那么请下载Micronaut的二进制文件,并将其添加到合适的路径中。

在安装完成后,您可以在命令行中看到mn工具的提示符。也就是说,通过打开一个Shell,并定位到合适的位置,您便可以键入:mn create-app micronaut-idg --build maven。

Micronaut通过包装器(wrapper)来支持Gradle和Maven。这免去了自行安装和构建工具的繁琐。注意,如果您喜欢使用Gradle的话,请不要在上述命令中使用--build maven。

如果您使用mvnw mn:run命令来运行服务器,那么您可能会看到一个默认为“未找到(not found)”的JSON响应。对此,让我们来研究一下该示例项目的布局。它是一个标准的Maven项目。其main类位于src/main/java/micronaut/idg/Application.java中。请注意,该main类是以一个嵌入式服务器运行的。当您更改代码时,Micronaut开发服务器会自动更新正在运行的应用程序。

2.添加一个Micronaut控制器
就像在Spring的MVC 中一样,您可以添加各种控制器类(controller class),将URL映射到代码处理器(handler)上。例如,您可以在src/main/java/micronaut/idg/controller/SimpleController上添加一个类。如下面的清单1所示,我们使用该控制器来创建一个文本响应。

清单1. 使用Micronaut控制器

package micronaut.idg.controller; 

import io.micronaut.http.MediaType; 
import io.micronaut.http.annotation.Controller; 
import io.micronaut.http.annotation.Get; 

@Controller("/simple") 
public class SimpleController { 

    @Get(produces = MediaType.TEXT_PLAIN) 
    public String index() { 
        return "A Simple Endpoint"; 
    } 
}

如下面的清单2所示,它能够容易地返回一个JSON格式的响应。

清单2. JSON格式的响应

package micronaut.idg.controller; 

import io.micronaut.http.MediaType; 
import io.micronaut.http.annotation.Controller; 
import io.micronaut.http.annotation.Get; 

import java.util.Map; 
import java.util.HashMap; 

@Controller("/simple") 
public class SimpleController { 
 
    @Get(produces = MediaType.APPLICATION_JSON) 
    public Map index() { 
      Map msg = new HashMap(); 
      msg.put("message", "A simple message"); 
      return msg;   

    } 
}

清单2演示了Micronaut针对@Get注解的produces参数所进行的智能处理。在这种情况下,它会发送我们已设置好的JSON格式的响应。

3.添加Micronaut服务层
由于能够预运行,因此Micronaut的IoC实现在底层是唯一的。当然,它仍然属于CDI(Contexts and Dependency Injection,上下文和依赖注入)规范的完整实现。这就意味着您可以使用从Spring中(如@Inject)获悉的所有类似DI的注释。

在下面的清单3中,我们将连接一个服务层的bean,以提供消息。在实际的应用程序中,这个类可以通过一个数据访问bean,来调用数据存储或其他远程的API。例如,我们可以创建一个src/main/java/micronaut/idg/service文件夹,并添加如清单3所示的两个文件——一个接口(Simple)、及其实现(SimpleService)。

清单3. 创建一个简单的服务层bean

// Simple.java 
package micronaut.idg.service; 

public interface Simple { 
  public String getMessage(); 

} 

// SimpleService.java 
package micronaut.idg.service; 

import jakarta.inject.Singleton; 

@Singleton 
public class SimpleService implements Simple { 
  public String getMessage(){ 
    return "A simple service message"; 

  } 
}

现在,您可以通过将服务注入在清单1中创建的SimpleController服务,来使用新的服务层。下面的清单4展示了Constructor的注入。

清单4. 将服务bean注入控制器

@Controller("/simple") 
public class SimpleController { 

  @Inject 
  private final Simple simpleService; 

  public SimpleController(@Named("simpleService") Simple simple) {  //(1) 
    thi.simpleService = simple; 

  } 

  @Get(produces = MediaType.APPLICATION_JSON) 
  public Map index() { 
    Map msg = new HashMap(); 
    msg.put("message", simpleService.getMessage()); 
    return msg; 
  } 
}

关键性任务是在注释1处完成的,其中服务bean是按照名称完成了连接。就能够看到来自服务层的响应:{"message":"A simple service message"}。

4.使用Micronaut的反应式NIO
接下来,让我们来讨论Micronaut与Reactor的结合使用。在这种情况下,我们将重构当前的应用程序,以使用Reactor和非阻塞IO。该应用程序虽然仍执行相同的任务,但是在后台会使用非阻塞栈——Reactor和Netty。

如前文所述,Micronaut 3默认是不包含响应式库的,因此,正如下面的清单5所示,我们首先需要将Reactor核心添加到Maven的POM处。

清单5. 将Reactor添加到pom.xml

<dependency> 
    <groupId>io.projectreactor</groupId> 
    <artifactId>reactor-core</artifactId> 
    <version>3.4.11</version> 
</dependency>

如下面的清单6所示,您可以对返回的SimpleController进行修改。

清单6. 使控制器非阻塞

import reactor.core.publisher.Mono; 

//... 

@Get 
  public Mono<map> index() { 
    Map msg = new HashMap(); 
    msg.put("message", simpleService.getMessage()); 
    return Mono.just(msg); 
  } 
}

如您所见,我们只是使用Reactor的Mono类,包装了相同的返回类型(即,string/strin的映射)。

在反应方式中,由于使用远程服务也能够得到类似的支持,因此您完全可以在非阻塞IO上运行应用程序。

5.使用Micronaut的CLI创建新的组件
您也可以使用Micronaut的命令行工具(CLI),来stub out各种组件。例如,如果你想添加一个新的控制器,那么可以使用命令:mn add-controller MyController。如下面的清单7所示,它将输出一个新的控制器、及其对应的测试。

清单7. 使用Micronaut命令行创建一个新的控制器

mn create-controller MyController 
| Rendered controller to src/main/java/micronaut/idg/MyControllerController.java 
| Rendered test to src/test/java/micronaut/idg/MyControllerControllerTest.java

6.使用Micronaut进行云原生开发
如前文所述,Micronaut是为云原生微服务和无服务器的开发而构建的。Micronaut支持一种所谓联合(federation)的云原生概念。此处的联合是指,几个较小的应用程序共享相同的设置,并且可以实现串联部署。这听起来像极了微服务架构,其目的就是为了使得微服务的开发更简单,并能够保持可管理性。有关联合服务的更多信息,请参阅Micronaut的相关文档。

此外,Micronaut还可以轻松地针对云环境实现部署。如下面的清单8 所示,您可以部署Google Cloud Platform(GCP)的Docker存储库。

清单8. 使用GCP的Docker存储库部署Micronaut应用

./mvnw deploy \ 
     -Dpackaging=docker \ 
     -Djib.to.image=gcr.io/my-org/my-project:latest

在这种情况下,该项目会被作为Docker镜像,推送到GCP的Docker存储库处。请注意,我们在此用到了Jib Maven插件。它能够将Java项目转换为Docker镜像,而无需您创建实际的Docker文件。

此外,我们已经将Docker标识为带有-Dpackaging=docker的打包工具,一旦打包完成,您便可以像下面的清单9那样,使用GCP命令行工具,去部署自己的项目。

清单9. 从命令行处运行Docker镜像

gcloud run deploy \ 
    --image=gcr.io/my-org/my-project:latest \ 
    --platform managed \ 
    --allow-unauthenticated

Micronaut支持的另一种云原生功能是:跟踪。例如,Micronaut通过各种注释,使得启用Jaeger的分布式跟踪,变得相当简单。

如下面的清单10所示,我们可以将Jaeger配置为跟踪微服务应用程序application.xml文件中的所有请求。

清单10. application.xml中的Jaeger配置

tracing: 
  jaeger: 
    enabled: true 
    sampler: 
      probability: 1

7.小结
Micronaut提供了一系列非常适合云原生和微服务开发的功能。同时,该框架更适合让传统的、基于API的开发,变得简单明了。此外,它还可以与反应式NIO的Reactor和Netty进行很好的集成。

七个用于云原生世界的Java框架 Java编程语言自诞生以来已有将近30年的历史,该语言及其字节码已经广泛应用在从嵌入式芯片到大型服务器群的所有领域。Java结合了坚不可摧的虚拟机和大量的库,为编写随处运行的代码提供了一个肥沃的生态系统。然而,Java一直在努力的一个领域是服务器领域,它通常必须处理来自数千甚至数百万个用户的连接。早些年,Java工具是创建为所有用户强制执行业务逻辑的服务器端应用程序的最佳工具之一。J2EE、Hibernate、Spring等Java框架和基本的Javaservlet模型使得创建强大的Web应用程序变得相对容 阅读详情

相关推荐

Java主流框架全解析:从企业级开发到云原生

Java作为一门历史悠久且应用广泛的编程语言,其强大的生态系统离不开各种优秀的框架支持。无论是传统的企业级应用开发,还是现代的微服务、云原生架构,Java都提供了丰富的框架选择。本文将全面解析当前主流的Java框架,涵盖Web开发、微服务、数据持久化、响应式编程、测试、安全等多个领域,帮助开发者根据项目需求选择合适的工具。

vvilkin的学习备忘 1526

云原生Java框架—Quarkus

Quarkus

gcl的博客 1万+

Java 云原生之路:Micronaut 框架

本文是“Native Compilations Boosts Java”系列文章的一部分。你可以通过订阅 RSS 接收更新通知。 Java 主导着企业级应用。但在云计算领域,采用 Java 的成本比它的一些竞争对手更高。原生编译降低了在云端采用 Java 的成本:用它创建的应用程序启动速度更快,使用的内存更少。 那么,Java 用户的问题来了:原生 Java 是如何改变开发方式的?我们在什么情况下应该切换到原生 Java?什么情况下又不应该切换?我们应该使用什么框架?本系列文章将回答这些问题。 对服务

JavaMonsterr的博客 288

Java云原生框架Quarkus初探

Quarkus 作为一个全新的云原生和微服务框架,通过编译成本地运行的方式,对比传统的Java应用程序有着天然的运行性能优势,且占用较少的内存资源。同时又兼容常用的Java框架,降低了Java程序员的学习成本,让Java程序员可以快速上手开发应用。但是要看到目前业界采用并大规模部署的并不多,跟传统的Java程序兼容性还存在一定的问题,社区相对传统的Spring成熟度也有一些距离。对于一些新应用且对性能要求高的应用值得考虑。

一群专业码农的笔记本 4392

Java 云原生微服务框架 Quarkus 入门实践

Quarkus定位要做超声速、亚原子的Java框架,使用最好标准为OpenJDK HotSpot和GraalVM量身定制的Kubernetes Native Java栈;从一开始就是针对Kubernetes设计的云原生优化Java应用开发框架;兼容主流的框架开发模式如Jpa、Netty、Undertow、Hibernate、JWT、Spring。最新版本为2.13.3。Quarkus 官网:https://quarkus.io/

javajavajava 1753

【云原生技术】云计算中一些常见的Java框架和工具

开发人员可以根据项目的规模、复杂性和目标来选择适合的框架,以便更轻松地构建各种类型的Java应用程序,包括普通应用、原生应用和Mesh应用。总之,开发语言、框架和应用类型之间存在密切的关系,开发人员根据项目需求和目标选择适当的语言和框架,并构建特定类型的应用程序,如普通应用、原生应用或Mesh应用,以满足用户需求。Spring Boot的强大生态系统、社区支持以及丰富的开发工具使其成为Java开发人员首选的框架之一,用于构建各种类型的Java应用程序,无论是传统的Web应用还是现代的微服务和云原生应用。

weixin_46453070的博客 1506

Java云原生技术概述

云原生(Cloud Native)是一种构建和运行应用程序的方法论,它充分利用了云计算的优势,如弹性伸缩、高可用性和自动化运维等。云原生应用通常被设计为在容器(如Docker)中运行,并通过编排工具(如Kubernetes)进行管理。这种方法论鼓励使用微服务架构、持续集成/持续部署(CI/CD)流水线、不可变基础设施和声明式API等最佳实践。

hong161688的博客 1505

网工最容易搞混的三个概念:防火墙、网闸、堡垒机,一文让你轻松搞明白。

网闸的作用可以简单概括为:在两个或多个不同安全级别的网络(如内网和外网、普通网与高安全网、受限网与互联网)之间建立一个严格隔离、信息流转的安全桥梁。它的核心任务是实现数据安全传输与隔离,避免网络之间的直接连接带来的安全隐患。数据传输安全:网闸保证数据从一个网络到另一个网络时,能够进行审查、过滤和转换,防止恶意数据或非法信息被传入内部网络或外部泄露。高安全性隔离:网闸常常用于企业的内外网隔离、军事网络、政府机关等对数据隔离要求极高的环境。

HWP18612324139的博客 3639

Java云原生+quarkus

通过这个教程,我们从零开始创建了一个简单的Java云原生应用,并将其打包发布到本地Docker。p.s. 这几个文件中的配置是直接 copy target 目录文件,所以我们要把 docker 目录中的这几个文件先拷贝到项目的根目录下,如上图。修改代码后,在浏览器访问服务时,到达代码时就会触发热加载,此次热加载启动只花了 0.429 秒。接下来,我们将从零开始,开发一个简单的Java云原生应用,并将其打包发布到本地Docker。可以看到我已经打包完成,就是这个文件。关于启动这块,还有没有其它的启动方式呢?

Hanko的专栏 1590

解决Word中英文混排的5个常见排版问题(含单词换行、间距调整等)

本文详细解析Word中英文混排的5大常见排版问题,包括单词换行、间距调整、标点混用等,提供专业解决方案。通过设置段落格式、调整兼容性选项和使用字体组合等技巧,帮助用户轻松解决文档排版难题,提升专业性和阅读体验。

vim8coder的博客 1343

在AutoDL的A100云服务器上,用Docker搞定Sapien+RobotWin环境(附完整conda list)

本文详细介绍了在AutoDL的A100云服务器上使用Docker构建Sapien+RobotWin环境的完整指南。通过配置Vulkan渲染管线、精确复现Conda环境以及解决常见问题,帮助研究人员高效搭建稳定的机器人仿真开发环境,特别适合需要高性能GPU加速的复杂仿真任务。

weixin_30689307的博客 433

Java 框架如何支持云原生应用的开发

综上所述,Java 框架通过提供微服务支持、容器化集成、故障容错机制、可扩展性和弹性特性以及 DevOps 集成,为云原生应用的开发提供了强大的优势。通过结合这些特性,开发人员可以构建高度可扩展、可维护和可靠的云原生应用。云原生应用的兴起推动了 Java 框架的演变,使其提供强大的特性来简化云原生开发。Java 框架集成了对容器化的支持,包括 Docker 和 Kubernetes。java 框架通过以下特性支持云原生应用开发:微服务架构支持:内置服务发现、负载均衡和配置管理。

2401_87878486的博客 977

二相混合式步进电机闭环矢量控制simulink仿真(含仿真文件)

在位置跟踪伺服系统中二相混合式步进电机闭环矢量控制simulink仿真

qq_39023633的博客 2万+

java云框架_java云原生-Quarkus框架笔记

前言在鼓吹云原生的时代 java也在与时俱进衍生出适合云原生时代的框架技术quarkus是开源的基于vert.x等框架开发的一种应用层框架 可以利用graalvm来做native image 提升执行效率官网: https://quarkus.io/graalVM oracle开源的一个强力的跨语言 vm 可以将多种语言编译成native image此处记录笔记 方便后续查询使用示例此处使用mav...

weixin_39717825的博客 530

实战解析:如何用Python逆向破解FastMoss的TikTok数据加密签名(附完整代码)

本文详细解析了如何用Python逆向破解FastMoss平台的TikTok数据加密签名机制,包括MD5加密算法和JS逆向分析。通过完整的Python代码示例,帮助开发者理解签名生成原理并实现自动化请求,提升数据获取能力。

weixin_30955617的博客 561

11.Labview实现用户界面切换的几种方式---通过VI间相互调用

本文介绍了界面切换的几种方式,分别是重入和引用①重入方式可以通过调用子VI的方式打开被调用的界面,往往应用于弹窗等的设置程序。②引用方式分两种,一种是打开引用,一种是静态引用。区别在于打开引用需要设置被打开VI的目标地址,静态引用仅需在引用时绑定VI的位置即可。③推荐使用静态引用的方式切换界面。④使用引用打开界面时,需通过属性节点和调用节点来设置程序的状态。更多内容欢迎大家补充和留言讨论~本文介绍了GUI界面设计相关的程序,更多相关文章后续持续更新,请关注作者不迷路~本期就到这里,再见~

关注我,更多技术问题欢迎私聊~ 9553

Java:使用Micronaut框架云原生Java

2017年,Java服务器端的前景出现了一个认知问题。随着向微服务和轻量级(通常是容器化的运行时)的转变,开发人员开始注意到传统Java应用程序的相对膨胀,这些应用程序被打包并部署到servlet容器上的共享Java虚拟机(JVM)中。无服务器的出现进一步加速了这种认知。

yueqian_edu的博客 470

【OpenClaw从入门到精通】第26篇:从0到1构建OpenClaw二次发行版——企业专属AI平台实战指南(2026实测)

本文基于OpenClaw 2026.3.7开源内核,聚焦企业级AI平台的二次发行构建,从技术原理、实操流程到商业落地提供完整方法论。核心围绕“内核层-能力层-产品层”三层架构,详解源码编译、私有化部署、企业级特性开发(数据合规、国产化适配、业务系统集成)、产品化包装等关键步骤,并通过审计行业“智审助手”虚拟实战案例具象化落地路径。文章兼顾新手入门与进阶提升,提供可直接复用的代码、配置文件及执行结果,解决企业对AI Agent“开箱即用”“数据不出域”“业务适配”的核心诉求,助力开发者快速打造企业专属AI平台

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 717

打破Spring的垄断,云原生Java框架Micronaut

Micronaut是一个创新性的、现代的、基于 JVM 的全堆栈云原生Java开发框架,旨在构建模块化、易于测试的 JVM 应用程序,支持 Java、Kotlin 和 Groovy 语言。与传统的Java框架相比,Micronaut具有卓越的性能和低延迟,并支持云原生开发模式。它通过提前进行依赖注入、AOT(Ahead of Time)编译和减少反射使用等技术手段,显著减少了应用程序的启动时间和内存占用。

5171

在 IW31 录入班次与当班负责人,并让 IW38 列表同步显示:基于 IWO10018 + IWOC0004 的一套可落地增强方案

摘要 本文详细介绍了在SAP PM模块中实现工厂设备维护订单增强的完整方案,重点解决两个核心需求:在订单创建时新增班次负责人和班次字段,并在订单列表中直接显示这些信息。文章从需求分析、技术设计到具体实现步骤进行了系统阐述。 关键实现步骤包括: 通过CI_AUFK结构扩展AUFK表,确保字段持久化存储 使用IWO10018增强在IW31/IW32/IW33事务中添加输入界面 通过IWOC0004增强在IW38订单列表中显示新增字段 采用优化的数据填充策略提升性能 该方案不仅满足业务需求,还考虑了用户体验和系统

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 181

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java云原生崛起微服务框架Quarkus入门实践

不用再担心SpringBoot启动慢和内存占用大的困惑了,为K8S云原生Quarkus轻松实现快、省、灵活的特性,本篇了解Quarkus优势和性能,并从quarkus工程创建开始,实现简单编码、普通jar打包、打包二进制文件和可跨平台直接运行二进制文件,并制作成docker镜像运行验证。

itxiaoshen博客 1620

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java面试新趋势:云原生与新兴框架实战解析

谢飞机同学,今天我们聚焦云原生Java技术,重点考察Micronaut、Quarkus等新兴框架及云原生应用设计。:(自信地)面试官好!云原生我可太熟了!Docker、K8s我都用过,Quarkus号称"为容器而生",Micronaut的依赖注入我也研究过!

weixin_49437670的博客 1059

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 掉了两根头发,可算是把volatile整明白了
下一篇: AOP切入点表达式有哪五种通知类型
Java_ttcd
博客等级 码龄4年 198粉丝 190原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值