是否可以使用Camel的“计时器”组件中的属性来修改用于定期轮询的sql select(按时间戳记)?

我想使用“计时器”组件按移动日期范围轮询(从中选择)数据库表。

我想知道是否可以(以某种方式)使用“ firedTime”属性来执行此操作...

使用时:

exchange.getIn().getHeader("firedTime",String.class)

...在我的select语句的“ where”子句中建立和设置日期范围值。

是否有可能(或建议)获取“ firedTime”值,执行必要的日期算术并在“ Processor”内部构建select语句。然后,使用我新建的SQL字符串在处理器中设置新的Exchange标头属性,以转发到路由?

有点像...

    from("timer://theTimerName?fixedRate=true&period=10000")
            .process(new Processor() {
                public void process(Exchange msg) throws Exception {
                    //get "firedTime" property and use to build startTime and endTime values...
                    //build select statement with date range
                    //   e.g.,//   String pollingSql = "select * from myTable where updateTimestamp between '<startTime>' and '<endTime>'"; 
                    //add "pollingSql" to a header property in exchange(?)
                }
            })
            .toD(pollingSql)//(query)                
            .split(body())
            .convertBodyTo(java.lang.String.class,"UTF-8")

尝试这种方法没有成功(相同的值似乎仍然存在,因此数据范围没有及时扩大)

本质上,想知道这是否可能。
-或者,是否存在一种更好的,更可接受的,具有移动日期范围(或“时间框”)的轮询方法

thx

duracraft 回答:是否可以使用Camel的“计时器”组件中的属性来修改用于定期轮询的sql select(按时间戳记)?

是一个新人-但是,这种方法似乎对我有用。

    from("timer://theTimerName?pattern=yyyy-MM-dd HH:mm:ss&fixedRate=true&period=10000")
            .process(new Processor() {
                public void process(Exchange msg) throws Exception {
                    String firedTime = msg.getIn().getHeader("firedTime",String.class);
                    LocalDateTime ldtnow = LocalDateTime.parse(firedTime,formatter2);
                    LocalDateTime sldt = ldtnow.minusSeconds(5); 
                    LocalDateTime eldt = ldtnow.plusSeconds(60); 
                    String pollingQuery = "sql:select * from myTable where updateTimestamp between '" + sldt.format(formatter) + "' and '" + eldt.format(formatter) + "'?dataSource=myDatasourceBean";
                    msg.getIn().setBody(pollingQuery);
                }
            })
            .toD("${body}")   //the constructed sql statement                
            .split(body())
            .convertBodyTo(java.lang.String.class,"UTF-8")
            ...
本文链接:https://www.f2er.com/3162856.html

大家都在问