我正在执行计时器触发的Azure功能。我希望能够更改计时器,即cron表达式,而不必重新部署。我从Azure的应用程序配置中获取其他设置,但不适用于TimerTrigger,并且得到:当我非静态字段,方法或属性时,需要对象引用写TimerTrigger(config["CronExpression"])
,其中config是IConfiguration。有谁知道如何使用Azure应用配置执行此操作?除了本地开发以外,我不希望使用settings.json文件
答案 0 :(得分:3)
您可以通过引用%...%
包围的名称来在配置中指定计时器表达式。例如,在您的配置中,创建一个名为MyTimerExpression
且值为0 */10 * * * *
的新值,以每10分钟运行一次。在您的本地开发环境中,这意味着向local.settings.json
文件中添加一个条目,如下所示:
{
...
"MyTimerExpression": "0 */10 * * * *"
...
}
现在在您的计时器触发器中,执行以下操作:
[TimerTrigger("%MyTimerExpression%")]
答案 1 :(得分:0)
您可以通过引用%...%
包围的名称来在配置中指定计时器表达式。
schedule
/ScheduleExpression
:CRON表达式或TimeSpan值。 TimeSpan只能用于在App Service Plan上运行的功能应用程序。 您可以将时间表表达式放入应用设置中,并将此属性设置为使用%符号包装的应用设置名称,例如本例:“%ScheduleAppSetting%” 。
TimerTriggerAttribute
https://github.com/Azure/azure-webjobs-sdk-extensions/blob/a34f4909bad85ebdb7777b2fe8a823d879f3c48d/src/WebJobs.Extensions/Extensions/Timers/TimerTriggerAttribute.cs#L21-L24的xml文档中未提及
但是,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中获取值