1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/silentbalanceyh-vertx-zero

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
d10076-vertx-native-mysqlclient.md 6.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 04:28 85b9559

Vert.x Native, MySqlClient

В нулевой системе мы рассматриваем больше свободы для разработчиков, в такой ситуации она предоставляет конкретную инъекцию для нативных клиентов, таких как:

  • Zero system полностью поддерживает клиенты vert.x здесь. В этой главе мы сосредоточимся на MySqlClient для подключения к существующей базе данных.

Демо-проекты:

Standalone — 6073: up-gaea.

1. Конфигурация

Эта глава дублируется с D10072 — Configuration, vertx-mysql.yml, потому что это подготовительные шаги для клиента mysql.

1.1. vertx.yml

zero:
  lime: mysql
  vertx:
    instance:
    - name: vertx-zeus
      options:
        maxEventLoopExecuteTime: 30000000000

1.2. vertx-inject.yml

mysql: io.vertx.up.plugin.jdbc.MySqlInfix

1.3. vertx-mysql.yml

Все конфигурации 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 требуется некоторая дополнительная конфигурация (конфигурация сервера).

2. Конфигурация сервера

vertx-server.yml

server:
- name: up-gaea
  type: http
  config:
    port: 6073
    host: 0.0.0.0

Наконец, когда вы закончите настройку, структура папок проекта должна быть следующей:

Структура папок проекта

3. Исходный код

3.1. Api

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);
}

3.2. Consumer

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());
                    }
                });
    }
}

4. Консоль

Когда вы запускаете это приложение, вы должны увидеть следующие журналы:

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/silentbalanceyh-vertx-zero.git
git@api.gitlife.ru:oschina-mirror/silentbalanceyh-vertx-zero.git
oschina-mirror
silentbalanceyh-vertx-zero
silentbalanceyh-vertx-zero
master