我正在做一个定时器触发的 Azure 函数。我希望能够更改计时器,即 cron 表达式,而无需重新部署。我正在从 Azure 中的应用程序配置中获取其他设置,但这不适用于 TimerTrigger,我得到:当我编写其中 config 是 IConfiguration时,非静态字段、方法或属性需要对象引用。TimerTrigger(config["CronExpression"])
有谁知道如何使用 Azure 应用程序配置来做到这一点?我希望不使用 settings.json 文件,而不是用于本地开发
2 回答
您可以通过引用由 . 括起来的名称来指定配置中的计时器表达式%...%
。例如,在您的配置中创建一个名称为MyTimerExpression
且值为 的新值,例如,0 */10 * * * *
每 10 分钟运行一次。在您的本地开发环境中,这意味着在local.settings.json
文件中添加一个条目,如下所示:
{
...
"MyTimerExpression": "0 */10 * * * *"
...
}
现在在您的计时器触发器中,执行以下操作:
[TimerTrigger("%MyTimerExpression%")]
快速回答
您可以通过引用由 . 包围的名称来指定配置中的计时器表达式%...%
。
schedule
/ScheduleExpression
:CRON 表达式或 TimeSpan 值。TimeSpan 只能用于在应用服务计划上运行的函数应用。您可以将计划表达式放在应用程序设置中,并将此属性设置为包含在 % 符号中的应用程序设置名称,如本示例中所示: "%ScheduleAppSetting%"。
研究
https://github.com/Azure/azure-webjobs-sdk-extensions/blob/a34f4909bad85ebdb7777b2fe8a823d879f3c48d/src/WebJobs.Extensions/Extensions/Timers/TimerTriggerAttribute.cs#L21-L24的xml文档中没有提到它TimerTriggerAttribute
但是,TimerSchedule Create
使用名称解析器https://github.com/Azure/azure-webjobs-sdk-extensions/blob/9feb4f2ad6f70e443a036a135b58121c70dbdaf3/src/WebJobs.Extensions/Extensions/Timers/Scheduling/TimerSchedule.cs#L65
...然后用于DefaultNameResolver
从配置中获取值https://github.com/Azure/azure-webjobs-sdk/blob/aeabc5f43f7c50ca67267cbfa429a08fc68623a9/src/Microsoft.Azure.WebJobs.Host/DefaultNameResolver.cs#L34