vertx 和传统 jdbc 客户端可以在 quarkus 中协同工作吗?
Can vertx and traditional jdbc clients work together in quarkus?
在我的quarkus项目中,我添加了以下依赖来创建一个非阻塞的异步项目
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-vertx</artifactId>
</dependency>
<dependency>
<groupId>io.smallrye.reactive</groupId>
<artifactId>smallrye-mutiny-vertx-web-client</artifactId>
</dependency>
但是现在想往mysql数据库写入数据,所以想在项目中添加如下依赖
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm-panache</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-mysql</artifactId>
</dependency>
但是好像这个数据库驱动和orm是阻塞的,所以我想问的是,does vert.x work with traditional jdbc in quarkus?
另外一个问题是,quarkus 框架是异步非阻塞框架吗?它与vert.x有什么关系? qurakus框架添加vert.x依赖时,整个项目是否需要非阻塞?
Quarkus 可以是反应式的也可以是非反应式的,这取决于您选择使用哪个扩展。
Hibernate ORM Panache 适用于您希望使用 Hibernate ORM 和 Panache 以非反应性方式访问数据库的情况。
JDBC 也是如此,它不是反应式的,所以如果你想让你的整个应用程序都是反应式的,你必须使用其他东西。
在这种情况下,您可能想尝试这两个扩展:
quarkus-hibernate-reactive-panache
:见Hibernate Reactive with panache quickstart for an example
quarkus-reactive-mysql-client
:允许对数据库进行反应式访问。请参阅 quarkus 网站上的 guide for Vert.x SQL Clients
在 Quarkus 网站上,还有一个 intro on reactive for Quarkus。
指南中 how to use the Vert.x SQL client 的示例:
@Path("fruits")
public class FruitResource {
@Inject
io.vertx.mutiny.mysqlclient.MySQLPool client;
}
client.query("DROP TABLE IF EXISTS fruits").execute()
.flatMap(r -> client.query("CREATE TABLE fruits (id SERIAL PRIMARY KEY, name TEXT NOT NULL)").execute())
.flatMap(r -> client.query("INSERT INTO fruits (name) VALUES ('Orange')").execute())
.flatMap(r -> client.query("INSERT INTO fruits (name) VALUES ('Pear')").execute())
.flatMap(r -> client.query("INSERT INTO fruits (name) VALUES ('Apple')").execute())
.await().indefinitely();
使用 Hibernate Reactive 和 Panache 的示例 from the quickstart:
@Entity
public class Fruit extends PanacheEntity {
@Column(length = 40, unique = true)
public String name;
public Fruit() {
}
public Fruit(String name) {
this.name = name;
}
}
@GET
public Uni<List<Fruit>> get() {
return Fruit.listAll(Sort.by("name"));
}
quickstarts for Quarkus 的完整列表可在 GitHub 上找到。
寻找带有单词 reactive
的那些,您将有几个具有不同扩展名的示例。
总而言之,一种方法是用以下内容替换 Hibernate ORM 和 JDBC 扩展:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-reactive-panache</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-reactive-mysql-client</artifactId>
</dependency>
回答您的问题:
is the quarkus framework an asynchronous, non-blocking framework? What is its relationship to vert.x?
Quarkus 旨在与流行的 Java 标准、框架和库一起使用。因此,它是否具有反应性取决于您选择的扩展以及您如何设计应用程序。 Vert.x 是您可以使用的工具之一(参见 What's Quakrkus?)
When the quarkus framework Added vert.x dependency, did the whole project require non-blocking?
没有。例如,您可以在类路径上同时拥有 JDBC 驱动程序和 Vert.x SQL 客户端扩展,并在需要使用它们时通过注入获取其中之一。
在我的quarkus项目中,我添加了以下依赖来创建一个非阻塞的异步项目
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-vertx</artifactId>
</dependency>
<dependency>
<groupId>io.smallrye.reactive</groupId>
<artifactId>smallrye-mutiny-vertx-web-client</artifactId>
</dependency>
但是现在想往mysql数据库写入数据,所以想在项目中添加如下依赖
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm-panache</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-mysql</artifactId>
</dependency>
但是好像这个数据库驱动和orm是阻塞的,所以我想问的是,does vert.x work with traditional jdbc in quarkus?
另外一个问题是,quarkus 框架是异步非阻塞框架吗?它与vert.x有什么关系? qurakus框架添加vert.x依赖时,整个项目是否需要非阻塞?
Quarkus 可以是反应式的也可以是非反应式的,这取决于您选择使用哪个扩展。
Hibernate ORM Panache 适用于您希望使用 Hibernate ORM 和 Panache 以非反应性方式访问数据库的情况。 JDBC 也是如此,它不是反应式的,所以如果你想让你的整个应用程序都是反应式的,你必须使用其他东西。
在这种情况下,您可能想尝试这两个扩展:
quarkus-hibernate-reactive-panache
:见Hibernate Reactive with panache quickstart for an examplequarkus-reactive-mysql-client
:允许对数据库进行反应式访问。请参阅 quarkus 网站上的 guide for Vert.x SQL Clients
在 Quarkus 网站上,还有一个 intro on reactive for Quarkus。
指南中 how to use the Vert.x SQL client 的示例:
@Path("fruits")
public class FruitResource {
@Inject
io.vertx.mutiny.mysqlclient.MySQLPool client;
}
client.query("DROP TABLE IF EXISTS fruits").execute()
.flatMap(r -> client.query("CREATE TABLE fruits (id SERIAL PRIMARY KEY, name TEXT NOT NULL)").execute())
.flatMap(r -> client.query("INSERT INTO fruits (name) VALUES ('Orange')").execute())
.flatMap(r -> client.query("INSERT INTO fruits (name) VALUES ('Pear')").execute())
.flatMap(r -> client.query("INSERT INTO fruits (name) VALUES ('Apple')").execute())
.await().indefinitely();
使用 Hibernate Reactive 和 Panache 的示例 from the quickstart:
@Entity
public class Fruit extends PanacheEntity {
@Column(length = 40, unique = true)
public String name;
public Fruit() {
}
public Fruit(String name) {
this.name = name;
}
}
@GET
public Uni<List<Fruit>> get() {
return Fruit.listAll(Sort.by("name"));
}
quickstarts for Quarkus 的完整列表可在 GitHub 上找到。
寻找带有单词 reactive
的那些,您将有几个具有不同扩展名的示例。
总而言之,一种方法是用以下内容替换 Hibernate ORM 和 JDBC 扩展:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-reactive-panache</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-reactive-mysql-client</artifactId>
</dependency>
回答您的问题:
is the quarkus framework an asynchronous, non-blocking framework? What is its relationship to vert.x?
Quarkus 旨在与流行的 Java 标准、框架和库一起使用。因此,它是否具有反应性取决于您选择的扩展以及您如何设计应用程序。 Vert.x 是您可以使用的工具之一(参见 What's Quakrkus?)
When the quarkus framework Added vert.x dependency, did the whole project require non-blocking?
没有。例如,您可以在类路径上同时拥有 JDBC 驱动程序和 Vert.x SQL 客户端扩展,并在需要使用它们时通过注入获取其中之一。