我正在升级一个旧的系统,它是一个批处理作业,使用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;
}
}
1条答案
按热度按时间hc2pp10m1#
我只是用错了主管道。 Camel 主管道里有一个, Camel 泉主管道里也有一个。我只需要用 Camel 泉主管道,它就开始运行并保持活力。
除了交易问题,我正在为...创建另一个问题
但主程序正在运行