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:
-
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. -
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(…)) -
Selecione o componente e clique em CONFIRM ou arraste-o para o diagrama. O formulário de configuração será aberto automaticamente.
-
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.
-
-
Preencha os demais campos do formulário (como a query ou nome da procedure). Veja os parâmetros de cada componente.
-
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 |
sql:classpath:query.sql |
Parâmetros da Query |
(na query) |
Não |
Marcadores na sua query (ex: |
WHERE lastname = :#userLastName |
Exemplo
-
O fluxo recebe uma requisição HTTP POST no endpoint
/test. O corpo da requisição deve conter o campolastName. -
Depois, usa o valor obtido em
lastNamepara criar um header chamadouserLastName, extraindo o valor com jsonpath ($.lastName). -
Em seguida, executa uma consulta SQL definida no arquivo
query.sql(e referenciado viaclasspath), usando o data source chamadodatasource-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:
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:datasource-mysql-2 |
Query SQL |
(implícito) |
Sim |
Não há um campo de query. Você deve usar um passo anterior (como |
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
searchLastNamecom valor constante "Doe". -
Em seguida, chama a stored procedure
GET_USERS_BY_LASTNAME, passando o valor do headersearchLastNamecomo 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-5para 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"
}
Share your suggestions with us!
Click here and then [+ Submit idea]