Azure函数从Azure应用配置中配置计时器触发器

时间:2019-11-21 15:53:28

标签: azure .net-core azure-functions azure-app-configuration

我正在执行计时器触发的Azure功能。我希望能够更改计时器,即cron表达式,而不必重新部署。我从Azure的应用程序配置中获取其他设置,但不适用于TimerTrigger,并且得到:当我非静态字段,方法或属性时,需要对象引用TimerTrigger(config["CronExpression"]),其中config是IConfiguration。有谁知道如何使用Azure应用配置执行此操作?除了本地开发以外,我不希望使用settings.json文件

2 个答案:

答案 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%”

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer?tabs=csharp#configuration

研究

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

...具有解析出%...%https://github.com/Azure/azure-webjobs-sdk/blob/b798412ad74ba97cf2d85487ae8479f277bdd85c/src/Microsoft.Azure.WebJobs.Host/NameResolverExtensions.cs#L56-L72

的逻辑

... DefaultNameResolver然后使用它来从配置https://github.com/Azure/azure-webjobs-sdk/blob/aeabc5f43f7c50ca67267cbfa429a08fc68623a9/src/Microsoft.Azure.WebJobs.Host/DefaultNameResolver.cs#L34中获取值


感谢https://stackoverflow.com/a/58979319