Quiero ser capaz de base de datos de forma continua encuesta para seleccionar datos de mi mesa usando Camel. He configurado camello en mi solicitud de inicio de la primavera. Estas son las configuraciones que estoy usando
build.gradle:
implementation 'org.apache.camel:camel-jdbc-starter:2.24.0'
implementation 'org.apache.camel:camel-sql-starter:2.24.0'
RouteBuilder clase:
@Component
public class CustomCamelConfig extends RouteBuilder {
Logger log = LoggerFactory.getLogger(getClass());
@Autowired
RouteDataMapper dataMapper;
@Override
public void configure() throws Exception {
from("timer://timer1?period=2s").log("Called every 2 seconds")
.setBody(constant("select * from tenders"))
.bean(dataMapper,"generateSalesData")
.noDelayer();
}
}
Frijol:
@Component
public class RouteDataMapper {
Logger log = LoggerFactory.getLogger(getClass());
public void generateSalesData(String payload) {
log.info("RouteDataMapper - [generateSalesData]");
log.info("payload : {}", payload);
}
}
application.properties
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@xxx:xxx/zzz
spring.datasource.username=zzz
spring.datasource.password=zzz
Estoy frente a emitir es que, al imprimir el parámetro del método de frijol (generateSalesData (Cadena de carga útil)), me sale la cadena de consulta en sí ( "SELECT * FROM licitaciones") y no el valor de la tabla. El setBody () en el método configure no acepta una sql:select .. statement
, muestra "El setBody método (expresión) en el ProcessorDefinition tipo no es aplicable para los argumentos (String)".
Soy nuevo en camello. ¿Podría alguien por favor hágamelo saber lo que es que me falta por hacer.
La ruta que tiene, como está escrito, es simplemente fijando el cuerpo del mensaje a una cadena que pasa a parecerse a una SQL. Camello tiene ni idea, ya que no la utilice el componente correcto.
En lugar de
.setBody(constant("select * from tenders"))
Usted necesita decir Camel utilizar el sql
componente
.to("sql:select * from tenders")
El resultado que se transmite a RouteDataMapper
será una List<Map<String, Object>>
, como se describe en la documentación . Que había necesidad de ajustar el parámetro del método en consecuencia.