【问题标题】:SimpleScheduledRoutePolicy does not work on the specific timeSimpleScheduledRoutePolicy 在特定时间不起作用
【发布时间】:2019-08-31 10:57:16
【问题描述】:

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

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

 @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
        {
            SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
            GregorianCalendar gc = new GregorianCalendar(2019, Calendar.AUGUST, 31, 13, 45);
            policy.setRouteStartDate(gc.getTime());

            from("direct:start").routeId(issueDTO.getIssueId()).routePolicy(policy).process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception
                {
                    System.out.println("*****************" + issueDTO.getIssueId() + " running at " + gc.getTime().toString());
                }
            });
        }
    }

我错过了什么吗?

【问题讨论】:

    标签: apache-camel quartz-scheduler


    【解决方案1】:

    Direct endpoint 需要通过某些事件手动触发。如果您需要某些东西,在路线开始后自动触发的东西,您可以使用Timer endpointrepeatCount=1Quartz endpointfireNow=true

    例如这只会在路由启动后触发一次Exchange

    from("timer:start?repeatCount=1").routeId(issueDTO.getIssueId()).routePolicy(policy)
    

    【讨论】:

    • 我尝试了两种方式,即 Timer 端点和 Quartz 端点。但在这两种情况下,它都尊重routePolicy 中指定的startDate。只要这条线被执行from("timer:start?repeatCount=1").routeId(issueDTO.getIssueId()).routePolicy(policy),它就会开始路由。我只想在特定时间触发事件。
    【解决方案2】:

    好的..我得到了解决方案:)。 我使用了指定确切日期和时间的 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");
                }
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 2019-01-10
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      相关资源
      最近更新 更多