如何在启动 mule 时自动运行一次流程?

2023-12-25

我有一个 java 类,它使用种子集合创建一个干净的 MongoDB 数据库。它会自动识别数据库是否丢失并创建它。我想在启动 MuleEsb 时运行它。这样我就不需要在启动 mule 之前记得调用它。我希望将其放入流程中并在 mule 启动时自动运行该流程一次。

有没有一种方法可以在 mule 启动时执行此一次性操作?

- - 更新 - -

根据下面的对话,我将以下内容添加到我的 mule 配置中,并且流程会自动触发。

<quartz:connector name="Quartz" validateConnections="true"/>

<flow name="testService1">
    <quartz:inbound-endpoint name="runOnce" repeatCount="0" repeatInterval="1" jobName="job1" connector-ref="Quartz">
        <quartz:event-generator-job>
            <quartz:payload>foo</quartz:payload>
        </quartz:event-generator-job>
    </quartz:inbound-endpoint>

    <logger message="INBOUND HEADERS = #[headers:inbound:*]" level="WARN"/>
</flow>

我一个月前创建了一个 JIRA 来请求这样的功能:http://www.mulesoft.org/jira/browse/MULE-6877 http://www.mulesoft.org/jira/browse/MULE-6877

现在,你可以使用一个技巧:带有事件生成器作业的 Quartz 入站端点 http://www.mulesoft.org/documentation/display/current/Quartz+Transport+Reference#QuartzTransportReference-EventGeneratorJob repeatCount = 0这只会在启动时触发一次流程。

或者,您可以侦听上下文事件并在触发特定事件时调用流。下面显示了调用启动和关闭流程的侦听器:

package com.acme;

import org.mule.DefaultMuleEvent;
import org.mule.DefaultMuleMessage;
import org.mule.MessageExchangePattern;
import org.mule.api.MuleException;
import org.mule.api.MuleRuntimeException;
import org.mule.api.context.notification.MuleContextNotificationListener;
import org.mule.config.i18n.MessageFactory;
import org.mule.construct.Flow;
import org.mule.context.notification.MuleContextNotification;

public class FlowInvokingContextListener implements MuleContextNotificationListener<MuleContextNotification>
{
    private Flow startingFlow;
    private Flow stoppingFlow;

    public void onNotification(final MuleContextNotification notification)
    {
        if (notification.getAction() == MuleContextNotification.CONTEXT_STARTED)
        {
            sendNotificationToFlow(notification, startingFlow);
        }
        else if (notification.getAction() == MuleContextNotification.CONTEXT_STOPPING)
        {
            sendNotificationToFlow(notification, stoppingFlow);
        }
    }

    private void sendNotificationToFlow(final MuleContextNotification notification, final Flow flow)
    {
        try
        {
            final DefaultMuleEvent event = new DefaultMuleEvent(new DefaultMuleMessage(notification,
                notification.getMuleContext()), MessageExchangePattern.REQUEST_RESPONSE, startingFlow);
            flow.process(event);
        }
        catch (final MuleException me)
        {
            throw new MuleRuntimeException(MessageFactory.createStaticMessage("Failed to invoke: "
                                                                              + startingFlow), me);
        }
    }

    public void setStartingFlow(final Flow startingFlow)
    {
        this.startingFlow = startingFlow;
    }

    public void setStoppingFlow(final Flow stoppingFlow)
    {
        this.stoppingFlow = stoppingFlow;
    }
}

配置为:

<spring:beans>
    <spring:bean name="flowInvokingContextListener"
        class="com.acme.FlowInvokingContextListener"
        p:startingFlow-ref="startFlow" p:stoppingFlow-ref="stopFlow" />
</spring:beans>

<notifications>
    <notification event="CONTEXT" />
    <notification-listener ref="flowInvokingContextListener" />
</notifications>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在启动 mule 时自动运行一次流程? 的相关文章

随机推荐

  • app.config 连接字符串的文件转换任务

    我正在设置一个发布管道任务来使用变量替换多个连接字符串值来转换我的 app config 这些属性不在节点中 而是在单独的节点中 文件转换任务是否仅适用于节点或文件中任何位置的设置 连接字符串属性上的属性是名称和 connectionStr
  • 函数调用栈:train_function

    我在训练使用 keras 创建的功能模型时遇到以下错误 File D Age prediction testmatrixshape py line 34 in
  • python 乌龟中的逻辑错误

    我正在用 python 3 2 海龟编码 我有一张漂亮的坦克图 我知道如何向左移动并书写 然而 当试图使坦克上下移动时 我面临的问题是它会上升 但如果我松开并再次按下向上按钮 它转向左侧 可能很难解释 所以我包含了代码 Programmer
  • Xpath substring-before 只获取一个元素

  • 如何重新抛出异常并保留堆栈跟踪?

    这段代码 try try throw 1 catch e s print e s throw e catch e2 s2 print e2 s2 prints 1 0 main file test dart 34 7 1 0 main fi
  • RVM Requiremets 尝试利用已弃用的自制软件/版本

    我正在尝试让 Ruby on Rails 项目在我的 Mac OS Sierra 10 13 3 计算机上运行 当我导航到 Rails 文件夹时 RVM 告诉我以下信息 Required ruby 1 9 3 p392 is not ins
  • CSS:在列表项中显示彼此相邻的图像和div

    当我今天早上出发时 任务似乎很简单 建立一个元素列表 每个元素由缩略图 标题和副标题组成 我想让图像与其旁边的标题和副标题对齐 如果您查看 YouTube 视频页面 相关视频 框具有类似的布局 UPDATE 更具体地说 我正在尝试生成两列布
  • matplotlib:从图中删除补丁

    我在用matplotlib to interactively绘制一些patches and points 我通过队列从单独的进程接收数据并将它们发送到我的绘图进程 这部分代码工作正常 点显示在图表上 并按预期在图中不断更新 根据用户的要求
  • 第二高薪水

    编写一个 SQL 查询从 Employee 表中获取第二高的工资 Id Salary 1 100 2 200 3 300 例如 对于上面的 Employee 表 查询应返回 200 作为第二高薪水 如果没有第二高的薪水 则查询应返回 nul
  • SQL Server 2008 安装

    我正在尝试在启用 Win 7 的笔记本电脑上安装 MS SQL Server 2008 我在选择安装路径时遇到问题 当我继续选择 安装 然后单击 新的 SQL Server 独立安装或向现有安装添加功能 时 会弹出一个浏览对话框以选择安装文
  • Azure Functions ARM 模板部署删除函数

    我有一个 ARM 模板 包含在下面 来部署 Azure Function App 我将其部署为 az group deployment create resource group my group template file my func
  • 在 Excel 2013 中连接 Hortonworks Hive ODBC 时出错

    我正在尝试通过 Excel 2013 中的 ODBC 驱动程序查询 Hortonworks Hive 我在这里下载了驱动程序 32位 http hortonworks com downloads http hortonworks com d
  • JavaScript 点击处理程序在 for 循环内无法按预期工作[重复]

    这个问题在这里已经有答案了 我正在尝试学习 JS 但遇到了一个问题 我尝试了很多事情并用谷歌搜索但都是徒劳 以下代码无法按预期工作 我应该得到的值i单击但它总是返回 6 我正在拔头发 请帮忙 for var i 1 i lt 6 i con
  • 按日期列的子集对增量表进行分区

    我正在 Databricks 中创建一个增量表 其中包含 1 天的代理日志 数百行数百万行 我希望能够按小时对表进行分区 因此简单地按 time 列对表进行分区是不够的 另外 我正在使用 sql运行时在我的笔记本中创建表 但如果这是更好的选
  • WooCommerce 对于某些产品手动触发新订单电子邮件

    我需要知道仅针对特定产品的 WooCommerce 新订单电子邮件至给定电子邮件地址 例如 如果有人购买产品X需要一个新的订单电子邮件Y The Y未设置为后端收件人 有什么钩子可以实现这一点吗 我尝试关注 add action wooco
  • 基于 Android 订阅的许可

    目前正在准备将应用程序发布到市场上 大佬们想要对应用程序收取订阅费 但事实证明 这在 Android 上实现起来很麻烦 我们不想 99 美分永久购买该应用程序 因为该应用程序需要持续使用服务器 因此我们希望收取订阅费用 似乎 Android
  • 用空行填充查询结果

    我有以下查询 用于返回游戏中的最高分数 但如果记录少于 10 条 我希望用空行填充它 SELECT id MAX score mscore FROM scores WHERE id IN implode data GROUP BY id O
  • Postgresql 将 null 变成零 [重复]

    这个问题在这里已经有答案了 可能的重复 SELECT max x 返回 null 我怎样才能让它返回0 http stackoverflow com questions 1688715 select maxx is returning nu
  • 在 Laravel 4 中搜索和过滤/精炼数据库结果

    我正在寻找一种通过 Laravel 4 中的查询字符串搜索和过滤数据库表 Eloquent 模型的方法 我有一个名为houses列名为 price name hasCoffeeMachineand hasStove 我希望用户能够执行以下操
  • 如何在启动 mule 时自动运行一次流程?

    我有一个 java 类 它使用种子集合创建一个干净的 MongoDB 数据库 它会自动识别数据库是否丢失并创建它 我想在启动 MuleEsb 时运行它 这样我就不需要在启动 mule 之前记得调用它 我希望将其放入流程中并在 mule 启动