这是针对想要开始使用 Micronaut 的 Spring 应用程序开发人员的指南。通过本指南,您将获得足够的信息来使用 Micronaut 框架。
Micronaut 是一个框架,它以更快的启动时间而得名,通常是使用 AWS Lambda 的解决方案的首选。它使用提前 (AOT) 编译来确定应用程序需要什么。这样做的结果是应用程序具有更小的内存占用、快速的启动时间和无反射。
该框架提供了依赖注入、控制反转(IOC)和面向切面编程(AOP),这与 Spring 提供的类似。使用 Micronaut,您可以创建命令行应用程序、HTTP 服务器应用程序,甚至是事件驱动的应用程序。
有了这个介绍,让我们看看如何使用 Micronaut 创建一个应用程序。
要创建项目,您可以直接转到Micronaut 的启动来创建您的项目。这类似于 spring 如何提供一种使用https://start.spring.io创建项目的方法。
您也可以使用 SDKMan 安装命令行实用程序。命令行实用程序与启动站点的作用相同。有关此的更多详细信息,请参见此处。
在创建项目时,添加Hibernate-JPA功能,因为我们将创建一个具有 CRUD 功能的项目。生成项目后,我们将查看作为 Spring 开发人员通常会做的各种事情。
Hibernate-JPA
通常情况下,在春天,你会使用创建一个bean @bean,@Restcontroller,@service,@repository,等。Micronaut,我们有一些注释,则类似的。让我们来看看它们。
@bean
@Restcontroller
@service
@repository
@controller
@singleton
@prototype
@requestscope
没有@serviceor@component注释,但您可以使用上述注释来创建服务或组件。
@component
除此之外,我们还@infrastructure必须定义一个对应用程序运行至关重要的 bean,它不应被覆盖,并定义@threadlocal每个线程的 bean 范围的注解。
@infrastructure
@threadlocal
为了注入特定的 bean,Micronaut 支持基于构造函数、基于 setter、基于名称的相同注入机制,这类似于 spring 提供的。在 的情况下@autowire,您现在将使用@inject注释。
@autowire
@inject
您还可以拥有 bean 生命周期方法、条件 bean、bean 限定符等,它们类似于 spring 提供的那些。您可以随时在此处的Micronaut 文档中阅读有关它的更多信息。
现在,我正在创建一个与 MySQL 通信的 CRUD 应用程序。我需要的来自 Micronaut 的最小依赖是:
<dependency> <groupId>io.micronaut</groupId> <artifactId>micronaut-inject</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>io.micronaut</groupId> <artifactId>micronaut-http-server-netty</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>io.micronaut.data</groupId> <artifactId>micronaut-data-hibernate-jpa</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>io.micronaut.sql</groupId> <artifactId>micronaut-jdbc-hikari</artifactId> <scope>compile</scope> </dependency>
除此之外,我还必须添加mysql-connector-java驱动程序才能与 MySQL 通信。
mysql-connector-java
要创建实体,您可以使用通常的javax.persistence注释来创建实体、定义 id、列等。
javax.persistence
@Entity @Table(name = "Orders") public class Order { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
您的数据源和休眠配置也几乎保持不变:
datasources: default: url: jdbc:mysql://localhost:3306/ORDER username: root password: root jpa: default: properties: hibernate: hbm2ddl: auto: update show_sql: true dialect: org.hibernate.dialect.MySQL8Dialect
为了查询您的数据库,我们从 Micronaut 获取您通过扩展 CRUDRepository 或 JPARepository 等接口创建的接口的实现。我们还使用@query注释提供 JPA 查询支持。这是带有示例查询方法的 JPA 存储库的代码。
@query
@Repository public interface OrderRepository extends CrudRepository<Order, Long> { @Query("select o from Order as o") List<Order> getAllOrders(); }
休息控制器可以通过创建@controller注释,并提供您的GET,PUT,POST使用映射@get,@put,@post注释分别。所有这些注释都来自micronaut-http-client依赖项。
@get
@put
@post
micronaut-http-client
@Controller("/order") public class WebController { private final OrderService orderService; public WebController(OrderService orderService) { this.orderService = orderService; } @Get("/{id}") public HttpResponse<OrderDTO> getOrder(@PathVariable("id") Long id) { Optional<OrderDTO> mayBeOrder = orderService.getOrder(id); if (mayBeOrder.isPresent()) { return HttpResponse.created(mayBeOrder.get()); } return HttpResponse.notFound(); }
通过上述配置,应用程序在近2 秒内启动。
__ __ _ _ | \/ (_) ___ _ __ ___ _ __ __ _ _ _| |_ | |\/| | |/ __| '__/ _ \| '_ \ / _` | | | | __| | | | | | (__| | | (_) | | | | (_| | |_| | |_ |_| |_|_|\___|_| \___/|_| |_|\__,_|\__,_|\__| Micronaut (v2.5.8) 12:55:07.769 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... 12:55:08.150 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. 12:55:08.157 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version [WORKING] 12:55:08.248 [main] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.1.2.Final} 12:55:08.351 [main] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL57Dialect 12:55:09.059 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 1928ms. Server Running: http://localhost:8080
现在,这里有一个问题。
当应用程序启动时,bean 还没有被连接起来,这会延迟发生。当应用程序接收到第一个请求时,bean 连接发生,因此第一个被服务的请求会有一点延迟。随后的请求非常快。
这是统计数据。
现在为了真正提升启动性能,我们可以创建一个 Native 镜像。使用本机映像,您可以获得大约 90 毫秒的启动时间。
是的,具有 JPA CRUD 功能的90 毫秒。
原文链接:https://codingdict.com/