Apache camel SimpleScheduledRoutePolicy在特定时间不起作用

Apache camel SimpleScheduledRoutePolicy在特定时间不起作用,apache-camel,quartz-scheduler,Apache Camel,Quartz Scheduler,我正在开发一个web应用程序,其中用户添加问题,指定他/她应该收到通知邮件的日期和时间。我是apache camel和quartz调度器的新手 我已经编写了如下的示例代码。发布的只是一个POJO。如果问题是重复的,我已经配置了一个cron调度程序,它可以正常工作,也就是说,如果我将frequency指定为5,我将得到预期的输出,即控制台的println语句。但如果问题不是重复的,我已经使用SimpleScheduledRoutePolicy并硬编码了处理器的process()方法应该运行的日期和

我正在开发一个web应用程序,其中用户添加问题,指定他/她应该收到通知邮件的日期和时间。我是apache camel和quartz调度器的新手

我已经编写了如下的示例代码。发布的只是一个POJO。如果问题是重复的,我已经配置了一个cron调度程序,它可以正常工作,也就是说,如果我将frequency指定为5,我将得到预期的输出,即控制台的println语句。但如果问题不是重复的,我已经使用SimpleScheduledRoutePolicy并硬编码了处理器的process()方法应该运行的日期和时间。我只是将日期时间更改为当前系统时间的2分钟后,以检查代码是否工作。但它从不进入process方法,而是打印以下语句=>System.out.println(“**************”+issueDTO.getIssueId()+”运行在“+gc.getTime().toString()”)

@覆盖
public void configure()引发异常
{
System.out.println(“in-EmptureRouteBuilder configure()”;
System.out.println(“问题ID:+issueDTO.getIssueId());
System.out.println(“发布频率:+issueDTO.getFrequency());
System.out.println(“是重复的:+issueDTO.getIsRepetitive());
//如果重复
if(StringUtil.getBoolean(issueDTO.getIsRepetitive())
{
String fromString=“quartz2:/”+issueDTO.getIssueId()+”?cron=0/“+issueDTO.getFrequency()+”+“+*+*+*+*+*+?”;
from(fromString).process(新处理器(){
@凌驾
公共作废进程(Exchange)引发异常
{
System.out.println(issueDTO.getIssueId()+“每运行一次”+issueDTO.getFrequency()+“秒…”);
}
});
}
//如果不是重复的话
其他的
{
SimpleScheduledRoutePolicy=new SimpleScheduledRoutePolicy();
GregorianCalendar gc=新的GregorianCalendar(2019年,日历8月31日、13日、45日);
policy.setRouteStartDate(gc.getTime());
from(“direct:start”).routeId(issueDTO.getIssueId()).routePolicy(policy).process(新处理器(){
@凌驾
公共作废进程(Exchange)引发异常
{
System.out.println(“*************”+issueDTO.getIssueId()+”运行在“+gc.getTime().toString()”);
}
});
}
}
我遗漏了什么吗?

需要通过一些事件手动触发。如果您需要什么,在路线开始后自动触发什么,您可以使用
repeatCount=1
fireNow=true

例如,这将在路由启动后仅触发一次交换:

from("timer:start?repeatCount=1").routeId(issueDTO.getIssueId()).routePolicy(policy)
好的。。我得到了答案:)。 我使用了cron表达式来指定确切的日期和时间,它成功了

@Override
public void configure() throws Exception
{
    System.out.println("in ReminderRouteBuilder configure()");
    System.out.println("Issue ID : " + issueDTO.getIssueId());
    System.out.println("Issue Frequency : " + issueDTO.getFrequency());
    System.out.println("Is Repetative : " + issueDTO.getIsRepetitive());

    // if Repetitive
    if (StringUtil.getBoolean(issueDTO.getIsRepetitive()))
    {
        String fromString = "quartz2://" + issueDTO.getIssueId() + "?cron=0/" + issueDTO.getFrequency() + "+*+*+*+*+?";
        from(fromString).process(new Processor() {
            @Override
            public void process(Exchange exchange) throws Exception
            {
                System.out.println(issueDTO.getIssueId() + " running every " + issueDTO.getFrequency() + " sec...");
            }
        });
    }
    // if not Repetitive
    else
    {
        String fromString = "quartz2://" + issueDTO.getIssueId() + "?cron=0 40 12 4 SEP ? 2019";
        from(fromString).process(new Processor() {
            @Override
            public void process(Exchange exchange) throws Exception
            {
                System.out.println(issueDTO.getIssueId() + " running now");
            }
        });
    }
}

我尝试了两种方法,即计时器端点和石英端点。但在这两种情况下,它都遵守
routePolicy
中指定的
startDate
。从(“timer:start?repeatCount=1”).routeId(issueDTO.getIssueId()).routePolicy(policy)执行此行后,它将立即启动路由。我只想在特定时间触发事件。