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

Hed*_*ten 7 azure .net-core azure-functions azure-app-configuration

我正在做一个计时器触发的 Azure 函数。我希望能够更改计时器,即 cron 表达式,而无需重新部署。我正在从 Azure 中的应用程序配置获取我的其他设置,但这对 TimerTrigger 不起作用,我得到:当我在 config 是 IConfiguration 的情况下编写时,非静态字段、方法或属性需要对象引用TimerTrigger(config["CronExpression"])。有谁知道如何使用 Azure 应用程序配置来做到这一点?除了本地开发之外,我不希望使用 settings.json 文件

Tim*_*ell 9

快速回答

您可以通过引用 括起来的名称来在配置中指定计时器表达式%...%

schedule/ ScheduleExpression

CRON 表达式或 TimeSpan 值。TimeSpan 只能用于在应用服务计划上运行的函数应用。您可以将计划表达式放入应用程序设置中,并将此属性设置为用 % 符号括起来的应用程序设置名称,如下例所示: "%ScheduleAppSetting%"

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

研究

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

...其中具有解析%...%值的逻辑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


感谢/sf/answers/4128552361/

  • 提到将其包装在 %% 中的 Schedule 属性的文档位于 https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer?tabs=in-process&pivots=programming-language -csharp#:~:text=描述-,时间表,-A%20CRON%20表达式 (2认同)

Dav*_*idG 7

您可以通过引用由 括起来的名称在配置中指定计时器表达式%...%。例如,在您的配置中创建一个名称为MyTimerExpression和值的新值,例如0 */10 * * * *每 10 分钟运行一次。在您的本地开发环境中,这意味着在local.settings.json文件中添加一个条目,如下所示:

    {
        ...
        "MyTimerExpression": "0 */10 * * * *"
        ...
    }
Run Code Online (Sandbox Code Playgroud)

现在在您的计时器触发器中,执行以下操作:

    [TimerTrigger("%MyTimerExpression%")]
Run Code Online (Sandbox Code Playgroud)