我需要一个任务在wso2启动时只运行一次。我们如何确保这一点。以下内容在计划任务中不起作用
<trigger once="true"/>
尝试
<trigger count="1" interval="1"/>
我使用的是ESB 4.8.1。对我来说,这两种配置都很好。以下是我在每种情况下测试的时间表任务示例。
1.配置1-<trigger once="true"/>
<?xml version="1.0" encoding="UTF-8"?>
<task xmlns="http://ws.apache.org/ns/synapse" name="MyTask" class="org.apache.synapse.startup.tasks.MessageInjector" group="synapse.simple.quartz">
<trigger once="true"/>
<property xmlns:task="http://www.wso2.org/products/wso2commons/tasks" name="message">
<name xmlns="">The message will be displayed once</name>
</property>
</task>
2.配置-<trigger count="1" interval="1"/>
<?xml version="1.0" encoding="UTF-8"?>
<task xmlns="http://ws.apache.org/ns/synapse" name="MyTask" class="org.apache.synapse.startup.tasks.MessageInjector" group="synapse.simple.quartz">
<trigger count="1" interval="1"/>
<property xmlns:task="http://www.wso2.org/products/wso2commons/tasks" name="message">
<name xmlns="">The message will be displayed once</name>
</property>
</task>
但是,在ESB文档中,建议在ESB启动后仅使用<trigger once="true"/>
执行一次任务。
我也遇到了同样的问题(使用ESB4.9)。在尝试了很多选项后,我发现一个有效的配置是:
<trigger once="true" count="1" interval="1"/>
最新的ESB(Integrator v.6.4.0)中似乎仍然存在一个错误。
在启动和/或部署CAR归档时启动触发器的唯一方法是将间隔设置为高于1000的任何数字。我将它设置为1001,它在部署和重新启动时都会立即运行。下面的配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<task class="org.apache.synapse.startup.tasks.MessageInjector" group="synapse.simple.quartz" name="TSK_Logoff" xmlns="http://ws.apache.org/ns/synapse">
<trigger interval="1001" count="1" />
<property name="sequenceName" value="SEQ_Logoff" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/>
<property name="injectTo" value="sequence" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/>
<property name="message" xmlns:task="http://www.wso2.org/products/wso2commons/tasks">
<logoff/>
</property>
记录一下,我使用的版本是4.8.1。我没有解决这个问题,而是解决了它,并移动了我们必须做的功能。我将其从WSO2初创公司转移到了我们的web层,从而省去了将来与各种WSO2版本升级作斗争的麻烦。
我知道这个问题发生在2016年初,我在2019年3月回答这个问题看起来很奇怪。但这个问题似乎也发生在WSO2的新版本上,即使在2019年1月,其他建筑师也一直在引用/评论这篇文章。因此,我应该评论一下我最后做了什么。