Vinculando un Data Source a un Flujo de Integración
Después de crear un nuevo data source, deberá vincularlo al flujo de integración en el que será utilizado.
Para ello, siga los pasos a continuación:
-
Acceda o cree el flujo al cual el data source será vinculado.
Si aún no ha creado un flujo, acceda a: Creando una integración de tipo Source. -
Haga clic en Add Step y luego seleccione la pestaña Components.
Utilice uno de los siguientes componentes para vincular un data source a su flujo de integración, dependiendo del tipo de operación que desea ejecutar. Lea los detalles de cada componente y casos de uso en la siguiente tabla:
Componente Caso de Uso Query SQL (Recomendado)
Consultas dinámicas (
SELECTs) que utilizan parámetros de headers o del body. Ideal para externalizar queries.En el propio componente (ej:
uri: sql:classpath:query.sql)JDBC
Operaciones directas (
INSERT,UPDATE) donde la query se construye en un paso anterior del flujo.La query debe estar en el body del mensaje en el momento de la llamada.
SQL Stored Procedure
Ejecutar lógica de negocio compleja que ya existe en la base de datos (ej:
GET_USERS_BY_LASTNAME).En el propio componente (ej:
uri: sql-stored:NOMBRE_DE_LA_PROCEDURE(…)) -
Seleccione el componente y haga clic en CONFIRM o arrástrelo al diagrama. El formulario de configuración se abrirá automáticamente.
-
Con el formulario de configuración abierto, agregue el nombre exacto del data source manualmente en los componentes:
-
Para JDBC, localice y escriba el nombre del data source en el campo Data Source Name.
-
Para SQL y SQL Stored Procedure, localice y escriba el nombre del data source en el campo Data Source.
Para los componentes SQL y SQL Stored Procedure, es obligatorio incluir el símbolo "#" antes del nombre del data source (ej: #datasource-mysql-2).Si un componente (JDBC, SQL o SQL Procedure) vinculado a un data source es eliminado, el vínculo entre el data source y el flujo será removido automáticamente. Esto evita que el data source quede asociado a un componente inexistente. De igual manera, si un flujo vinculado a un data source es eliminado, todos los vínculos asociados a ese flujo serán removidos automáticamente.
-
-
Complete los demás campos del formulario (como la query o el nombre de la procedure). Vea los parámetros de cada componente.
-
Finalice la configuración haciendo clic en CONFIRM.
Componentes
| Haga clic en los nombres de los componentes para acceder a la documentación oficial de Apache Camel. |
SQL (Recomendado)
SQL es ideal para consultas dinámicas, donde los parámetros se pasan por headers o por el body, y la query puede ser externalizada.
Parámetros
| Parámetro (UI) | Parámetro (YAML) | Obligatorio | Descripción | Ejemplo |
|---|---|---|---|---|
Nombre del Data Source |
parameters.dataSource |
Sí |
El nombre exacto del Data Source que usted creó. |
datasource-mysql-2 |
Query SQL |
uri (path) |
Sí |
La consulta a ejecutar. Se recomienda usar |
sql:classpath:query.sql |
Parámetros de la Query |
(en la query) |
No |
Marcadores en su query (ej: |
WHERE lastname = :#userLastName |
Ejemplo
-
El flujo recibe una solicitud HTTP POST en el endpoint
/test. El cuerpo de la solicitud debe contener el campolastName. -
Luego, utiliza el valor obtenido en
lastNamepara crear un header llamadouserLastName, extrayendo el valor con jsonpath ($.lastName). -
A continuación, ejecuta una consulta SQL definida en el archivo
query.sql(y referenciado víaclasspath), usando el data source llamadodatasource-mysql-2. -
Finalmente, convierte (marshal) el resultado de la consulta SQL al formato JSON, preparando la respuesta para ser enviada al cliente.
Resumiendo: este flujo recibe un POST con un apellido (
lastName), ejecuta una query SQL usando ese valor, y retorna el resultado en JSON.
- from:
uri: rest:post:/test # el cuerpo de la solicitud debe contener el campo 'lastName'.
steps:
- setHeader:
name: 'userLastName'
expression:
jsonpath:
expression: $.lastName
- to:
uri: 'sql:classpath:query.sql'
parameters:
dataSource: "#datasource-mysql-2"
- marshal:
json: {}
Vea abajo el contenido del archivo query.sql usado en el flujo anterior:
A continuación vea los cuerpos de la solicitud y la respuesta:
Request Body:
{
"last name": "Doe"
}
Response Body:
[
{
"id": 1,
"name": "John"
},
{
"id": 2,
"name": "Jane"
}
]
JDBC
JDBC se utiliza para operaciones más directas. La principal diferencia es que espera que la query SQL esté en el cuerpo (body) del mensaje en el momento en que el componente es llamado.
Parámetros
| Parámetro (UI) | Parámetro (YAML) | Obligatorio | Descripción | Ejemplo |
|---|---|---|---|---|
Data Source |
uri (prefijo) |
Sí |
El nombre del Data Source precedido por |
jdbc:datasource-mysql-2 |
Query SQL |
(implícito) |
Sí |
No hay un campo de query. Usted debe usar un paso anterior (como |
setBody → constant: SELECT … |
Ejemplo
-
El flujo recibe una solicitud HTTP POST en el endpoint
/test. -
Luego, define el cuerpo del mensaje como una cadena constante:
SELECT id, name FROM newTestes.users WHERE lastname = 'Wilson'. Es decir, crea una query SQL fija, buscando todos los usuarios con apellido "Wilson". -
A continuación, ejecuta la query anterior en la base de datos usando el data source
datasource-mysql-2, a través del componente JDBC. -
Finalmente, convierte (marshal) el resultado de la consulta al formato JSON, preparando la respuesta para ser enviada al cliente.
Resumiendo: este flujo ejecuta siempre la misma consulta SQL (buscando usuarios con apellido "Wilson") y retorna el resultado en 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 está optimizado para llamar procedures almacenadas en la base de datos.
Parámetros
| Parámetro (UI) | Parámetro (YAML) | Obligatorio | Descripción | Ejemplo |
|---|---|---|---|---|
Data Source |
parameters.dataSource |
Sí |
El nombre exacto del Data Source que usted creó. |
datasource-mysql-5 |
Nombre de la Procedure |
uri (path) |
Sí |
El nombre de la procedure a ser llamada, seguido por sus parámetros. |
sql-stored:GET_USERS_BY_LASTNAME(…) |
Mapeo de Parámetros |
(en el uri) |
No |
Define cómo los headers de Camel son mapeados a los parámetros de la procedure. |
(VARCHAR ${header.searchlastName}) |
Ejemplo
-
El flujo recibe una solicitud HTTP POST en el endpoint
/test-stored-procedure. -
Luego define un header llamado
searchLastNamecon valor constante "Doe". -
A continuación, llama la stored procedure
GET_USERS_BY_LASTNAME, pasando el valor del headersearchLastNamecomo parámetro (VARCHAR ${header.searchLastName}). El componente utilizado es SQL Store Procedure, que ejecuta procedures en la base de datos. -
Después, utiliza el data source
datasource-mysql-5para conectar a la base de datos. -
Finalmente, convierte el resultado de la procedure a JSON.
Resumiendo: el flujo ejecuta una stored procedure en MySQL, pasando un parámetro, y retorna el resultado en 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 continuación vea la definición de la procedure y el cuerpo de la respuesta:
Procedure creada en la base de datos 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 ;
Esta procedure llamada GET_USERS_BY_LASTNAME, creada en MySQL, recibe un parámetro de entrada llamado p_lastname (de tipo VARCHAR).
Cuando se ejecuta, realiza una consulta en la tabla users, buscando todos los registros cuyo campo lastname sea igual al valor recibido en p_lastname. El resultado de la consulta retorna los campos id, name y lastname de esos usuarios.
En resumen, la procedure retorna todos los usuarios que tienen el apellido 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]