Vinculando um Data Source a um Fluxo de Integração

Após criar um novo data source, você deverá vinculá-lo ao fluxo de integração em que será usado.

Para isso, siga os passos abaixo:

  1. Acesse ou crie o fluxo ao qual o data source será vinculado.

    Caso ainda não tenha criado um fluxo, acesse: Criando uma integração do tipo Source.
  2. Clique em Add Step e, em seguida, selecione a aba Components.

    Use um dos componentes abaixo para vincular um data source ao seu fluxo de integração, a depender do tipo de operação que você quer executar. Leia os detalhes de cada componente e casos de uso na tabela a seguir:

    Componente Caso de Uso Query

    SQL (Recomendado)

    Consultas dinâmicas (SELECTs) que usam parâmetros de headers ou do body. Ideal para externalizar queries.

    No próprio componente (ex: uri: sql:classpath:query.sql)

    JDBC

    Operações diretas (INSERT, UPDATE) onde a query é montada em um passo anterior do fluxo.

    A query deve estar no body da mensagem no momento da chamada.

    SQL Stored Procedure

    Executar lógica de negócios complexa que já existe no banco de dados (ex: GET_USERS_BY_LASTNAME).

    No próprio componente (ex: uri: sql-stored:NOME_DA_PROCEDURE(…​))

  3. Selecione o componente e clique em CONFIRM ou arraste-o para o diagrama. O formulário de configuração será aberto automaticamente.

  4. Com o formulário de configuração aberto, adicione o nome exato do data source manualmente nos componentes:

    • Para JDBC, localize e digite o nome do data source no campo Data Source Name.

    • Para SQL e SQL Stored Procedure, localize e digite o nome do data source no campo Data Source.

      Para os componentes SQL e SQL Stored Procedure, é obrigatório incluir o símbolo "#" antes do nome do data source (ex: #datasource-mysql-2).
      Se um componente (JDBC, SQL ou SQL Procedure) vinculado a um data source for excluído, o vínculo entre o data dource e o fluxo será removido automaticamente. Isso evita que o data source fique associado a um componente inexistente. Da mesma forma, se um fluxo vinculado a um data source for excluído, todos os vínculos associados a esse fluxo serão removidos automaticamente.
  5. Preencha os demais campos do formulário (como a query ou nome da procedure). Veja os parâmetros de cada componente.

  6. Conclua a configuração clicando em CONFIRM.

Componentes

Clique no nome dos componentes para acessar a documentação oficial do Apache Camel.

SQL (Recomendado)

SQL é ideal para consultas dinâmicas, onde os parâmetros são passados por headers ou pelo body, e a query pode ser externalizada.

Parâmetros

Parâmetro (UI) Parâmetro (YAML) Obrigatório Descrição Exemplo

Nome do Data Source

parameters.dataSource

Sim

O nome exato do Data Source que você criou.

datasource-mysql-2

Query SQL

uri (path)

Sim

A consulta a ser executada. Recomenda-se usar classpath: para referenciar um arquivo .sql ou constant: para queries simples.

sql:classpath:query.sql

Parâmetros da Query

(na query)

Não

Marcadores na sua query (ex: :#userLastName) que são substituídos por headers do Camel.

WHERE lastname = :#userLastName

Exemplo

  • O fluxo recebe uma requisição HTTP POST no endpoint /test. O corpo da requisição deve conter o campo lastName.

  • Depois, usa o valor obtido em lastName para criar um header chamado userLastName, extraindo o valor com jsonpath ($.lastName).

  • Em seguida, executa uma consulta SQL definida no arquivo query.sql (e referenciado via classpath), usando o data source chamado datasource-mysql-2.

  • Por fim, converte (marshal) o resultado da consulta SQL para o formato JSON, preparando a resposta para ser enviada ao cliente.

    Resumindo: esse fluxo recebe um POST com um sobrenome (lastName), executa uma query SQL usando esse valor, e retorna o resultado em JSON.

- from:
    uri: rest:post:/test # o corpo da requisição deve conter o campo 'lastName'.
    steps:
      - setHeader:
          name: 'userLastName'
          expression:
            jsonpath:
              expression: $.lastName

      - to:
          uri: 'sql:classpath:query.sql'
          parameters:
            dataSource: "#datasource-mysql-2"

      - marshal:
          json: {}

Veja abaixo o conteúdo do arquivo query.sql usado no fluxo acima:

Query SQL:

O arquivo query.sql está armazenado em Resources e é referenciado via classpath. Ele contém a seguinte query SQL:

SELECT id, name FROM newTestes.users WHERE lastname = :#userLastName.

Essa consulta retornará todos os registros da tabela users cujo sobrenome (lastname) seja "Doe", mostrando apenas os campos id e name. Leia mais sobre instruções SQL aqui.

A seguir veja os corpos da requisição e da resposta:

Request Body:

{
"last name": "Doe"
}

Response Body:

[
  {
    "id": 1,
    "name": "John"
  },
  {
    "id": 2,
    "name": "Jane"
  }
]

JDBC

JDBC é usado para operações mais diretas. A principal diferença é que ele espera que a query SQL esteja no corpo (body) da mensagem no momento em que o componente é chamado.

Parâmetros

Parâmetro (UI) Parâmetro (YAML) Obrigatório Descrição Exemplo

Data Source

uri (prefixo)

Sim

O nome do Data Source precedido por jdbc:.

jdbc:datasource-mysql-2

Query SQL

(implícito)

Sim

Não há um campo de query. Você deve usar um passo anterior (como setBody) para definir o body da mensagem como a string da query.

setBody → constant: SELECT …​

Exemplo

  • O fluxo recebe uma requisição HTTP POST no endpoint /test.

  • Depois, define o corpo da mensagem como uma string constante: SELECT id, name FROM newTestes.users WHERE lastname = 'Wilson'. Ou seja, cria uma query SQL fixa, buscando todos os usuários com sobrenome "Wilson".

  • Em seguida, executa a query acima no banco de dados usando o data source datasource-mysql-2, através do componente JDBC.

  • Por fim, converte (marshal) o resultado da consulta para o formato JSON, preparando a resposta para ser enviada ao cliente.

    Resumindo: esse fluxo executa sempre a mesma consulta SQL (buscando usuários com sobrenome "Wilson") e retorna o resultado em JSON.

- from:
    uri: rest:post:/test
    steps:
      - setBody:
          expression:
            constant:
              expression: SELECT id, name FROM newTestes.users WHERE lastname = 'Wilson'
      - to:
          uri: jdbc:datasource-mysql-2
      - marshal:
          json: {}

SQL Stored Procedure

SQL Stored Procedure é otimizado para chamar procedures armazenadas no banco de dados.

Parâmetros

Parâmetro (UI) Parâmetro (YAML) Obrigatório Descrição Exemplo

Data Source

parameters.dataSource

Sim

O nome exato do Data Source que você criou.

datasource-mysql-5

Nome da Procedure

uri (path)

Sim

O nome da procedure a ser chamada, seguido pelos seus parâmetros.

sql-stored:GET_USERS_BY_LASTNAME(…​)

Mapeamento de Parâmetros

(no uri)

Não

Define como os headers do Camel são mapeados para os parâmetros da procedure.

(VARCHAR ${header.searchlastName})

Exemplo

  • O fluxo recebe uma requisição HTTP POST no endpoint /test-stored-procedure.

  • Depois define um header chamado searchLastName com valor constante "Doe".

  • Em seguida, chama a stored procedure GET_USERS_BY_LASTNAME, passando o valor do header searchLastName como parâmetro (VARCHAR ${header.searchLastName}). O componente usado é o SQL Store Procedure, que executa procedures no banco de dados.

  • Depois, usa o data source datasource-mysql-5 para conectar ao banco.

  • Por fim, converte o resultado da procedure para JSON.

    Resumindo: o fluxo executa uma stored procedure no MySQL, passando um parâmetro, e retorna o resultado em JSON.

 from:
    uri: rest:post:/test-stored-procedure
    steps:
      - setHeader:
          name: searchLastName
          expression:
            constant: Doe
      - to:
          uri: sql-stored:GET_USERS_BY_LASTNAME(VARCHAR ${header.searchLastName})
          parameters:
            dataSource: "#datasource-mysql-5"
      - marshal:
          json: {}

A seguir veja a definição da procedure e o corpo da resposta:

Procedure criada no banco de dados MySQL:

DELIMITER $$

CREATE PROCEDURE GET_USERS_BY_LASTNAME(
    IN p_lastname VARCHAR(100)
)
BEGIN
    SELECT
        id,
        name,
        lastname
    FROM
        users
    WHERE
        lastname = p_lastname;
END$$

DELIMITER ;

Essa procedure chamada GET_USERS_BY_LASTNAME, criada no MySQL, recebe um parâmetro de entrada chamado p_lastname (do tipo VARCHAR).

Quando executada, ela faz uma consulta na tabela users, buscando todos os registros cujo campo lastname seja igual ao valor recebido em p_lastname. O resultado da consulta retorna os campos id, name e lastname desses usuários.

Em resumo, a procedure retorna todos os usuários que têm o sobrenome informado como parâmetro.

Response Body

{
  "#result-set-1": [
  {
    "id": 1,
    "name": "John",
    "lastname": "Doe"
  },
  {
    "id": 2,
    "name": "Jane",
    "lastname": "Doe"
  }
],
"#update-count-1:0"

}
Thanks for your feedback!
EDIT

Share your suggestions with us!
Click here and then [+ Submit idea]