41

我正在研究 Azure 函数计时器 Job ,我需要从 appsettings 中获取 cron 表达式。请告诉我,我如何从 Azure 函数中的 appsettings 中获取值。我想从上午 9:00 到下午 12:00 每 30 分钟运行一次我的天蓝色函数\

{
 "disabled": false,
 "bindings": [
   {
     "name": "timerInfo",
     "type": "timerTrigger",
     "direction": "in",
     "schedule": "0 * * * * *"
   }
 ]
}
4

5 回答 5

64

将您的日程设置为"schedule": "%EmailScheduleTriggerTime%",然后在appsetting.json 或 local.settings.json中,您可以将 EmailScheduleTriggerTime 值设置为"0 30 9-12 * * *"

{
  "IsEncrypted": false,
  "Values": {
    "EmailScheduleTriggerTime": "0 30 9-12 * * *", //Run every  30 minutes from 9:00 to 12:00

  },
  "ConnectionStrings": {
    "DefaultConnection": ""
  }
}

[FunctionName("TimerfunctionApp")] 
public static void Run([TimerTrigger("%EmailScheduleTriggerTime%")] TimerInfo TInfo, TraceWriter log)
于 2017-08-07T09:21:28.553 回答
34

如果您使用 VS2017 Functions 工具并在 .NET 项目中定义您的函数(而不是直接在 Azure 门户中),您可以AppSettings使用以下%语法获取间隔:

[FunctionName("MyTimerFunction")] 
public static void Run([TimerTrigger("%TimerInterval%")] TimerInfo myTimer, TraceWriter log, ..

然后在您的应用程序设置中指定所需的 CRON 格式间隔,例如。在local.settings.json

{
  "Values" : { 
      "TimerInterval" : "0 30 9-12 * * *"
    }
}
于 2017-08-07T07:16:33.550 回答
18

要添加到前面的答案,您可以appsettings.json使用语法从配置文件 ( ) 文件中的任何字段中获取任何值%- 不仅来自Values配置对象。

例如:

appsettings.json

{      
  "ScheduleConfiguration": {
    "FunctionOne": {
      "CronExpression": "0 40 2 * * *"
    }
  }
}

Functions.cs

    /// <summary>
    /// %ScheduleConfiguration:FunctionOne:CronExpression%
    ///  - e.g. "0 40 2 * * *" - executes at 02:40:00am every day
    /// </summary>
    [FunctionName("FunctionOne")]
    public async Task FunctionOne(
        [TimerTrigger("%ScheduleConfiguration:FunctionOne:CronExpression%")]
        TimerInfo timerInfo)
    {
        // Azure function code
    }
于 2019-11-18T17:36:35.327 回答
4

由于这篇文章已经有了很好的答案,我想在这里分享我的经验。我试图通过在appsettings.json文件中添加 cron 表达式在本地运行应用程序,但是当我运行函数应用程序时,我总是收到如下错误

“EmployeeTimerTrigger”函数出错:Microsoft.Azure.WebJobs.Host:错误索引方法“EmployeeTimerTrigger”。Microsoft.Azure.WebJobs.Host:“%EmployeeTimerTrigger%”未解析为值。

因此,为了解决这个问题,我们需要做的是将 cron 表达式从appsettings.jsonto转换为local.settings.json它工作得很好,我能够在本地对其进行测试。

编辑:为部署添加注释

函数应用从 Azure 上的函数应用本身的应用程序设置中读取计时器触发器设置。

当你计划在 Azure 中部署函数应用时,需要在 Azure 门户中函数应用的应用程序设置中进行一些小的更改。

您可以通过在 azure 门户 -> 配置 -> 应用程序设置中选择函数应用来导航到这些设置

您需要添加的第一个设置是您希望计时器触发器运行的时区,这是相同的示例

注意:请注意这些值区分大小写

键 = WEBSITE_TIME_ZONE

现在,我们将在此处添加的第二个设置用于我们的定时器触发功能,在此图像中,您将看到定时器将在东部标准时间上午 10:00 和下午 2:00 运行。

为什么要问东部标准时间?好吧,请记住我们的第一个设置是针对网站时区的,因此这两个设置可以协同工作。

注意:计时器触发器的名称应与您在函数应用中的名称匹配,请注意这些值区分大小写,并且应与您在计时器触发器函数中的名称完全匹配。

在此处输入图像描述

添加这些设置后,不要忘记保存更改,现在您已准备好部署函数应用。

我希望这个答案有助于在本地部署和运行计时器功能。

于 2020-04-06T14:26:03.340 回答
0

如前所述(对于 Node js),我们可以%scheduleValue% 在 function.json 中使用scheduleValue并在 local.settings.json 中用作参数,这里在 Microsoft 文档中提到了它 - https://docs.microsoft.com/en-us/azure/azure -functions/functions-bindings-timer?tabs=javascript#configuration

函数.json local.settings.json

于 2020-12-20T21:18:16.923 回答