Azure功能计时器通过应用程序设置配置

Pal*_*udi 18 azure azure-functions

我正在开发Azure函数计时器Job,我需要从appsettings获取cron表达式.请告诉我,如何从Azure功能中的appsettings中获取价值.我希望每隔30分钟从上午9:00到下午12:00运行我的天蓝色功能

{
 "disabled": false,
 "bindings": [
   {
     "name": "timerInfo",
     "type": "timerTrigger",
     "direction": "in",
     "schedule": "0 * * * * *"
   }
 ]
}
Run Code Online (Sandbox Code Playgroud)

Gar*_*son 25

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

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

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

{
  "Values" : { 
      "TimerInterval" : "0 30 9-12 * * *"
    }
}
Run Code Online (Sandbox Code Playgroud)


Kar*_* VK 21

将您的日程安排为"schedule": "%EmailScheduleTriggerTime%",然后在appsetting.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)
Run Code Online (Sandbox Code Playgroud)

  • 有人在本地工作吗?当我在local.settings.json中指定设置时,出现错误:Microsoft.Azure.WebJobs.Host:错误索引方法“ MainTriggerEntry”。Microsoft.Azure.WebJobs.Host:“%CRON_EXPRESSION%”无法解析为值。 (3认同)
  • 这是:https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings#binding-expressions---app-settings (2认同)

小智 12

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

例如:

appsettings.json:

{      
  "ScheduleConfiguration": {
    "FunctionOne": {
      "CronExpression": "0 40 2 * * *"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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
    }
Run Code Online (Sandbox Code Playgroud)

  • 根据 /sf/answers/3197647421/ `appsettings.json` 已重命名为 `local.settings.json` 以更清楚地表明它**仅适用于本地开发** (2认同)
  • 如果您想部署到 Linux,请使用双下划线“__”而不是“:”。Windows 会理解两者 (2认同)

NSD*_*umb 6

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

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

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

编辑:添加部署注释

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

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

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

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

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

键 = WEBSITE_TIME_ZONE

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

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

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

在此输入图像描述

添加这些设置后,请不要忘记保存更改,现在您就可以部署函数应用了。

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