如何解决在配置中而不是在编译时设置了Azure函数RunOnStartUp?
我有一个Azure计时器触发功能,计划在生产中每3个月运行一次。但是,在测试环境中,我希望它每次启动时都能在启动时运行。
目前我有:
[TimerTrigger("%TimerInterval%",RunOnStartup = false)]
我不是真的想将RunonStartup
更改为true
,但是想知道是否可以在配置中进行设置吗?
是否可以做类似的事情:
RunOnStartup = "%runOnStartUpBool%"
并在应用设置中进行设置?
解决方法
有一个很好的SO问题,对此问题here有多个答案。
我的测试环境通常是我的本地环境,所以我更喜欢使用preprocessor directive。
public static void Run([TimerTrigger("%TimerInterval%"
#if DEBUG,RunOnStartup=true // When debugging... run the job as soon as we press debug,no need to wait for the timer.
#endif
)]TimerInfo myTimer)
{
说明:在本地开发(调试)期间,#if DEBUG
块被激活。
它启用RunOnStartup=true
参数。在生产(而非调试)中,#if DEBUG
块是隐藏的。
不是最漂亮的代码,但是比在开发期间必须等待计时器触发间隔要好得多。
,您无法在运行时从配置/环境变量动态设置RunOnStartup
。但是您可以用其他方法解决问题,因为您的目的是在启动时(或任何时候)手动触发它。您可以通过一些专门的http调用手动触发该功能,如下所述。可以说,这是从测试环境的部署管道中进行的,作为部署后的步骤(或您喜欢的任何其他方式)。
要运行非HTTP触发的功能(例如在这种情况下,它是计时器触发的),您需要一种向Azure发送请求以运行该功能的方法。用于发出此请求的URL采用特定形式。
- 主机名:由功能应用程序的名称加上azurewebsites.net或您的自定义域组成的功能应用程序的公共位置。
- 文件夹路径:要通过HTTP请求访问非HTTP触发的功能,您必须通过文件夹 admin / functions 发送请求。
- 功能名称:您要运行的功能的名称。
您可以将此请求位置以及函数的“主键”用作对Azure的POST请求中的x-functions-key
头,以运行函数。注意Content-Type
标头应设置为application/json
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。