我的用例如下。
在我的mule流程中,我将Http作为入站端点,将jdbc(SQL Server)作为出站端口。我试图在每次调用流时向SQL服务器插入一条记录。我还在全局级别中使用“on-redelivery-attempts-exceeded”块回滚异常策略。
但是当我的数据库关闭时,我试图插入,我的流量会抛出异常。使用重新传递计数回滚异常并不会影响流程。
请咨询。
* 流程文件: *
<!-- <jdbc-ee:mssql-data-source name="MS_SQL_Data_Source" user="sa" password="mssql" url="jdbc:sqlserver://VIKRAM-PC\MSSQLEXPRESS:1433;databaseName=testsqldb" transactionIsolation="UNSPECIFIED" doc:name="MS SQL Data Source"/> -->
<jdbc-ee:connector name="Database" dataSource-ref="MSSQLDataSourceBean" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database"/>
<spring:beans>
<spring:bean id="MSSQLDataSourceBean" name="MSSQLDataSourceBean" class="org.enhydra.jdbc.standard.StandardDataSource" >
<spring:property name="driverName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<spring:property name="url" value="jdbc:sqlserver://VIKRAM-PC\MSSQLEXPRESS:1433;databaseName=testsqldb;user=sa;password=mssql;"/>
</spring:bean>
</spring:beans>
<rollback-exception-strategy name="Rollback_Exception_Strategy" maxRedeliveryAttempts="3" when="#[exception.causedBy(java.lang.Exception)]"/>
<flow name="DataBaseAsOutBound" doc:name="DataBaseAsOutBound" processingStrategy="synchronous">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8089" path="sqltest" doc:name="HTTP"/>
<logger level="INFO" doc:name="Logger" message="$$$$$$$$$$$$$ start of the flow $$$$$$$$$$$$$$"/>
<jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="insertque" queryTimeout="-1" connector-ref="Database" doc:name="Database">
<jdbc-ee:query key="insertque" value="insert into tesdb(colone,coltwo) values(123,'vikkione')"/>
</jdbc-ee:outbound-endpoint>
</flow>
注意:删除了架构位置
此致 维克拉姆
答案 0 :(得分:0)
如果要重试数据库插入,请使用Until Successful处理器:
http://blogs.mulesoft.org/meet-until-successful-store-and-forward-for-mule/
答案 1 :(得分:0)
您必须将rollback-exception-strategy
注册为默认例外策略:
<configuration defaultExceptionStrategy-ref="Rollback_Exception_Strategy" doc:name="Configuration">
<http:config useTransportForUris="false"/>
</configuration>
或者从某个流程中添加引用:
<flow name="DataBaseAsOutBound" ...>
<...>
<exception-strategy ref="Rollback_Exception_Strategy" doc:name="Reference Exception Strategy"/>
</flow>
您可能会收到另一个错误Default exception strategy must not have expression attribute. It must accept any message
。如果是,则删除when="#[exception.causedBy(java.lang.Exception)]"
以使其成为全局异常策略。