java - Camel 简单表达式在运行之间不进行计算

标签 java apache-camel

我有一个 Camel 2.18.2 应用程序,每天凌晨 4 点使用quartz cron 语句运行。

我的路线从 SQL 收集作为我的路线的有效负载,然后将当前日期、昨天的日期和明天的日期存储为 header ,并调用速度端点来生成包含这些日期和有效负载的文件。

据我所知,文件每天都会填充新值但是日期不会被评估,它们与第一次运行时的日期相同。

如何完成每次运行时评估日期?

from("{{camm.quartz}}")
            .routeId("CAM")
            .autoStartup("{{camm.startup}}")
            .log("Consuming positions view")
            .to(fromStr)
            .bean((Processor) exchange -> {
                final List<Map<String, Object>> body = exchange.getIn().getBody(List.class);
                List<String> myList = new ArrayList<>();
                for (Map<String, Object> row : body) {
                    for (Map.Entry<String, Object> entry : row.entrySet()) {
                        myList.add((String) entry.getValue());
                    }
                }
                exchange.getOut().setBody(myList);
            })
            .multicast()
            .stopOnException()
            .parallelProcessing()
            .to("direct:a", "direct:b")
            .end();

//First we create all actions
from("direct:a")
        .routeId("Creating CAMM Request file")
        .autoStartup("{{camm.startup}}")
        .setHeader("replyFileName", constant("{{camm.bloomberg.response.file}}"))
        .setHeader("dateFrom", simple(LocalDate.now().plusDays(1).format(formatter)))
        .setHeader("dateTo", simple(LocalDate.now().plusDays(1).format(formatter)))
        .setHeader("actionsDate", constant("effective"))
        .to("velocity:velocity/cam/camm.vm?contentCache=false")
        .to("{{camm.bloomberg.outgoing}}?fileName={{camm.bloomberg.request.file}}")
        .log("Bloomberg Request File: {{camm.bloomberg.response.file}} created")
        .end();


//create updates
from("direct:b")
        .routeId("Creating CAMM Updates file")
        .autoStartup("{{camm.startup}}")
        .setHeader("replyFileName", constant("{{camm.bloomberg.response.file.updates}}"))
        .setHeader("dateFrom", simple(LocalDate.now().minusDays(1).format(formatter)))
        .setHeader("dateTo", simple(LocalDate.now().format(formatter)))
        .setHeader("actionsDate", constant("entry"))
        .to("velocity:velocity/cam/camm.vm?contentCache=false")
        .to("{{camm.bloomberg.outgoing}}?fileName={{camm.bloomberg.request.file.updates}}")
        .log("Bloomberg Updates File: {{camm.bloomberg.response.file.updates}} created")
        .end();

最佳答案

这是预期的,因为 Camel 路由设置一次,因此上面的代码只执行一次来设置路由。

因此,现在使用 LocalDate 等的代码应该移至方法并使用方法调用,而不是简单的。

或者使用简单的日期函数,您可以使用加号和减号添加或移动日期date:now+24h:yyyMMdd

关于java - Camel 简单表达式在运行之间不进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42313016/

相关文章:

java - 我在哪里可以找到网络应用程序中保存的文件

java - 如何将 ArrayList<String> 连接到另一个字符串?

java - 如何将 Camel Quartz 集群与队列消费结合使用?

java - Apache Camel 返回带有转义字符的 JSON

java - 压缩从 SFTP 服务器下载的文件

java - 具有相同存储库和实体的多个数据源

https - 使用基于 Https 的基本身份验证的 Camel http4 下载文件

json - 如何在蓝图中从 Camel 调用 REST 调用(带有 JSON 主体的 POST)

java - HTTP请求参数消耗: Camel SU issue

java - 如何从 ObjectInputStream 读取所有对象