【问题标题】:Mule ESB Database connector - select after insertMule ESB 数据库连接器 - 插入后选择
【发布时间】:2018-03-23 05:02:33
【问题描述】:

我遇到了 mule 数据库连接器的问题。我有一个接收带有一些数据的 JSON 的流,我获取一些数据并使用它将记录插入数据库。插入记录时,数据库会生成自己的 ID。现在在同一流程中,我想选择该 ID,但有时它不会返回任何结果。是否有可能当我在插入后立即执行“选择”查询时,它尚未插入/尚未生成 ID?我该怎么做才能使其正常工作?如何使“选择”数据库连接器等待该数据?

【问题讨论】:

    标签: mule integration


    【解决方案1】:

    在插入模式下,数据库连接器具有三个属性 autoGeneratedKeysautoGeneratedKeysColumnIndexesautoGeneratedKeysColumnNames

    除了有效负载中的行数,它还返回自动生成的插入值

    Mule doc here

    【讨论】:

    • 也就是说我什至不需要查询自动生成的字段?如果我正确设置属性,它会由连接器返回?
    • yes & yes - 只要底层 JDBC 驱动程序支持它 - (我怀疑很少有人不支持它)
    【解决方案2】:

    我使用 oracle 连接器执行了类似的步骤,并且在存储过程中运行良好。步骤将是

    a. Call Stored procedure 1
    1. Call stored procedure to insert record based on parameters.
    2. Commit the transaction.
    3. Return 1(success) or 0(fail) based on outcome
    
    b. Call Stored procedure 2 only if you get 1 (success) from Stored procedure 
    1. Retrieve id for the record inserted in stored procedure 1
    

    【讨论】:

    • 谢谢,我会试试看问题是否仍然存在。公平地说,它在大多数情况下都有效,但您的方法似乎更可靠。
    【解决方案3】:

    首先:

    您是否检查过数据库连接器在响应中检索到 1(或者您的数据库显示受影响行数的方式)?

    如果您的流程配置为异步(mule 的默认设置)并且它具有适当的连接超时,它应该在进入下一个连接器时添加信息。

    另外,您是否检查过它是否确实在数据库中插入了该行?
    您是否检查过实际上您正在使用 db 生成的正确 ID 进行选择?

    我建议您逐步调试以检查此信息。

    希望对你有帮助!

    【讨论】:

    • 从我在项目中看到的情况来看,没有响应检查 - 只需插入一个记录器,然后选择。流程可能是异步的,但是 insert 和 select 是在同一个范围内执行的,我认为这里的处理策略不相关。它正在插入该行,我的流程大部分时间都在其当前状态下工作,但偶尔它不会。我不使用 ID 进行选择,我使用一些数据和 InternalID 插入,数据库生成 ExternalID,我想在查询中使用 InternalID 选择该 ExternalID。
    【解决方案4】:

    您应该在插入记录后执行“提交”,否则该记录不可用于立即选择。我同意 user3366906 回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2015-07-21
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 2016-03-17
      相关资源
      最近更新 更多