В нулевой системе мы рассматриваем больше свободы для разработчиков, в такой ситуации она предоставляет конкретную инъекцию для нативных клиентов, таких как:
— Standalone — 6073: up-gaea
.
Эта глава дублируется с D10072 — Configuration, vertx-mysql.yml, потому что это подготовительные шаги для клиента mysql.
zero:
lime: mysql
vertx:
instance:
- name: vertx-zeus
options:
maxEventLoopExecuteTime: 30000000000
mysql: io.vertx.up.plugin.jdbc.MySqlInfix
Все конфигурации mysql помещаются в vertx-mysql.yml
в корневой узел mysql
следующим образом:
mysql:
host: localhost
port: 3306
username: htl
password: "xxxxxxijn123"
database: DB_ZERO
provider_class: "io.vertx.ext.jdbc.spi.impl.HikariCPDataSourceProvider"
Вся вышеуказанная конфигурация поддерживается для нативной конфигурации mysql, но для проекта up-gaea
требуется некоторая дополнительная конфигурация (конфигурация сервера).
server:
- name: up-gaea
type: http
config:
port: 6073
host: 0.0.0.0
Наконец, когда вы закончите настройку, структура папок проекта должна быть следующей:
package up.god.micro.tabular;
import io.vertx.up.annotations.Address;
import io.vertx.up.annotations.EndPoint;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@EndPoint
@Path("/api")
public interface DbApi {
@Path("native/{type}")
@GET
@Address("ZERO://QUEUE/NATIVE/GET")
String sayDb(@PathParam("type") String type);
}
package up.god.micro.tabular;
import io.vertx.core.eventbus.Message;
import io.vertx.core.json.JsonArray;
import io.vertx.ext.sql.ResultSet;
import io.vertx.ext.sql.SQLClient;
import io.vertx.up.aiki.Ux;
import io.vertx.up.annotations.Address;
import io.vertx.up.annotations.Queue;
import io.vertx.up.atom.Envelop;
import jakarta.inject.infix.MySql;
@Queue
public class DbWorker {
@MySql
private transient SQLClient client;
@Address("ZERO://QUEUE/NATIVE/GET")
public void sayDb(final Message<Envelop> message) {
final String type = Ux.getString(message);
this.client.queryWithParams("SELECT * FROM SYS_TABULAR WHERE S_TYPE=?",
new JsonArray().add(type), handler -> {
// Success or Failure
if (handler.succeeded()) {
final ResultSet res = handler.result();
// Build result json array
for (final JsonArray item : res.getResults()) {
System.out.println(item);
}
message.reply(Envelop.success(res.getResults()));
} else {
// Replied with error, now only print stack
handler.cause().printStackTrace();
message.reply(Envelop.ok());
}
});
}
}
Когда вы запускаете это приложение, вы должны увидеть следующие журналы:
infix-afflux-runner | io.vertx.ext.asyncsql.impl.MYSQLClientImpl -| \
Creating configuration for localhost:3306
Это означает, что соединение было установлено, затем, когда вы отправляете следующий запрос, вы должны получить данные следующим образом:
URL: http://localhost:6073/api/native/room.status
Метод: GET
Ответ:
{
"data": [
[
8,
null,
"可操作",
"Operation",
null,
"room.status",
``` ## 5. Summary
Вот некоторые моменты, которые необходимо упомянуть.
1. Существует аннотация jakarta.inject.infix.MySql, которую можно использовать для внедрения SQLClient. Это то же самое, что и @Inject из JSR303, но вы должны быть уверены, что ваша конфигурация MySql настроена правильно.
2. Также здесь мы использовали io.vertx.ext.sql.SQLClient для хранения созданной ссылки. Это не ссылка на io.vertx.ext.asyncsql.MySQLClient, потому что в официальном документе vert.x указано: [http://vertx.io/docs/vertx-mysql-postgresql-client/java/#_specifying_a_pool_name](http://vertx.io/docs/vertx-mysql-postgresql-client/java/#_specifying_a_pool_name).
3. И последнее: лучше всего использовать Envelop.success для создания ответа и отправки сообщения. Не отправляйте данные напрямую, вы можете передать любые данные в метод Envelop.success.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )