我在运行exec任务之前使用Ant等待URL可访问,但它等待的时间比我想要的要长得多。
我的waitfor
-
<waitfor maxwait="3" maxwaitunit="minute" checkevery="500">
<http url="http://127.0.0.1:${product.listenport}/start/"/>
</waitfor>
几乎只要我在终端上看到这个输出,我就会在浏览器中加载URL并按预期获取页面,但Ant仍在等待(甚至可能长于maxwait
值。)
这个实现有问题吗?
答案 0 :(得分:0)
在第一次检查之前,您可能需要插入一个短暂的延迟(只需几秒钟就可以发出声音)。我怀疑Ant是第一次尝试过早地获取URL并因某种原因挂起 期间首次获取(在waitfor
有机会等待半秒之后再次尝试)。
<sleep seconds="5" />
<waitfor maxwait="3" maxwaitunit="minute" checkevery="500">
<http url="http://127.0.0.1:${product.listenport}/start/"/>
</waitfor>
答案 1 :(得分:0)
我现在也遇到了这个问题。我试图使用waitfor作为一种ping
我们的一些单元测试需要数据库连接才能正确执行它们,并且我们在公司服务器上拥有该数据库。如果我没有连接到该服务器,我不希望测试尝试运行,因为这些任务只是等待服务器,我无法判断它是在运行测试还是只是等待用于连接。当我意识到后者时,相当多的浪费时间已经过去了。我必须连接到服务器,然后重新运行测试。所以我一直在寻找一种快速的Ping任务,如果没有连接到服务器就会失败。这是我的解决方案。
<limit maxwait="10" maxwaitunit="second" failonerror="true">
<waitfor maxwait="20" maxwaitunit="second">
<socket server="myserver" port="5432"/>
</waitfor>
</limit>
端口5432用于postgresql,但您可以检查适合您任务的端口。
答案 2 :(得分:0)
尝试将checkeveryunit
添加到您的块中,它应该可以解决这个问题:
<waitfor maxwait="3" maxwaitunit="minute" checkevery="5" checkeveryunit="second">
<http url="http://127.0.0.1:${product.listenport}/start/"/>
</waitfor>
这样您就不会等待500秒并传递maxwait