如何运行Camel Main以使其保持运行,并使用Spring上下文XML DSL?

2ledvvac  于 2022-11-23  发布在  Apache
关注(0)|答案(1)|浏览(181)

我正在升级一个旧的系统,它是一个批处理作业,使用CamelMain继续运行,这样它基本上可以每隔几秒钟循环和查询一个数据库。它还使用Spring进行配置,但不使用 Boot 。它是在Camel2.x上,我不得不将它升级到Camel3.14。Main类在那段时间里发生了变化。除了被移到不同的包之外,它已经丢失了用来添加Spring上下文的方法,即setApplicationContextUri("app-context")。现在Main上有一个configure()方法,但是我仍然没有找到向Main添加Spring上下文的方法。
查看新Main的javadoc,我发现MainSupport中有引用CamelContext的方法,但它们似乎是关于创建一个空白CamelContext。还有一个autoconfigure(CamelContext),它接受CamelContext,但它是受保护的,所以我不知道如何调用它。我猜没有扩展Main,我没有看到任何用例或示例。
或者,如果有一种方法可以在不使用Main的情况下实现这一点,我也愿意接受。
Spring和CamelContext主要用于设置像dataSources和Properties这样的bean。Route定义在包含java main()方法的同一个类中,该方法是从用于启动整个过程的脚本(这是旧版本)中调用的:

package com.foo.email.ffdb.listener;

import java.util.Properties;

import javax.annotation.Resource;

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.spring.Main;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import com.foo.email.ffdb.util.FireFrgtConstants;
 
public class EmailDBListener extends RouteBuilder {
private static Logger log = LogManager.getLogger(EmailDBListener.class.getName());
private static String routeId = FireFrgtConstants.EMAIL_ROUTE_ID;

@Autowired
private EmailDBProcessor emaiDBProcessor;

@Resource
private Properties emailProperties;

public static void main(String[] args) throws Exception {
    System.out.println("STARTING EMAILDBLISTENER");
    log.debug("Starting Email Batch ");
    Main main = new Main();
    main.setApplicationContextUri("app-context.xml");
    main.run();
    log.info("Email Batch Started:");
}

@Override
public void configure() throws Exception {
    log.debug("configure() ");
    from(configureSqlTimer())
    .routeId(routeId)
    .to("sqlComponent:{{SQL.READ_EMAIL_REQUESTS}}")
    .bean("fireForgetServiceMapper", "readEmailRequests")
    .process(emaiDBProcessor);
}

private String configureSqlTimer() {
    log.debug("configureSqlTimer() ");
    String pollingTime = emailProperties.getProperty(FireFrgtConstants.POLLING_TIME);
    String sqlTimer = "timer://pollFireFrgtTable?period=" + pollingTime + "s";
    return sqlTimer;
}

}

hc2pp10m

hc2pp10m1#

我只是用错了主管道。 Camel 主管道里有一个, Camel 泉主管道里也有一个。我只需要用 Camel 泉主管道,它就开始运行并保持活力。
除了交易问题,我正在为...创建另一个问题
但主程序正在运行

相关问题