7

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

4

2 回答 2

11

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

    {
        ...
        "MyTimerExpression": "0 */10 * * * *"
        ...
    }

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

    [TimerTrigger("%MyTimerExpression%")]
于 2019-11-21T16:18:16.763 回答
2

快速回答

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

schedule/ ScheduleExpression:

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

~ https://docs.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


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

于 2020-09-03T12:06:26.430 回答