我有一个 Azure 计时器触发功能,计划在生产中每 3 个月运行一次。但是在测试环境中,我希望它在每次触发时在启动时运行。
目前我有:
[TimerTrigger("%TimerInterval%", RunOnStartup = false)]
我真的不想改变RunonStartuptotrue但想知道是否有办法在配置中设置它?
是否可以执行以下操作:
RunOnStartup = "%RunOnStartUpBool%"并在appsettings中设置?
我有一个 Azure 计时器触发功能,计划在生产中每 3 个月运行一次。但是在测试环境中,我希望它在每次触发时在启动时运行。
目前我有:
[TimerTrigger("%TimerInterval%", RunOnStartup = false)]
我真的不想改变RunonStartuptotrue但想知道是否有办法在配置中设置它?
是否可以执行以下操作:
RunOnStartup = "%RunOnStartUpBool%"并在appsettings中设置?
这里有一个很好的 SO question,对同一个问题有多个答案。
我的测试环境通常是我的本地环境,所以我喜欢使用预处理器指令。
public static void Run([TimerTrigger("%TimerInterval%"
#if DEBUG
,RunOnStartup=true // When debugging... run the job as soon as we press debug, no need to wait for the timer.
#endif
)]TimerInfo myTimer)
{
说明:在本地开发(调试)期间,该#if DEBUG块被激活。它启用RunOnStartup=true参数。在生产(不是调试)中,该 #if DEBUG块是隐藏的。
不是最漂亮的代码,但比在开发期间必须等待计时器触发间隔要好得多。
您不能RunOnStartup在运行时从配置/环境变量动态设置。但是您可以通过其他方式解决您的问题,因为您的目的是在启动时(或任何时候)手动触发它。您可以通过一些专门的 http 调用手动触发该功能,如下所述。您可以从测试环境的部署管道作为部署后步骤(或您喜欢的任何其他方式)来做到这一点。
若要运行非 HTTP 触发的函数(如在本例中是计时器触发的),您需要一种向 Azure 发送请求以运行该函数的方法。用于发出此请求的 URL 采用特定形式。

您可以将此请求位置与函数的“主密钥”一起用作x-functions-key对 Azure 的 POST 请求中的标头以运行该函数。注意Content-Type标题应设置为application/json
有关详细信息,请参阅手动运行非 HTTP 触发的函数