I'm building a job to trigger at some regular interval (say 1 minute). I've successfully used triggered web jobs with time-span hard coded in the functions.
public void foo([TimerTrigger("00:01:00")] TimerInfo timer)
Now if I ever want to change the trigger time from 1-min to 2-min I've to redeploy the code. Instead is there a way to make the TimeTrigger Configurable, from a config file.
Note that replacing the string with a dynamically read value isn't possible as the TimerTrigger Attribute is a const string expression or a Type.
After much digging, I've realized that this can be done with an SDK extension class
TimerSchedule
.For it, you would need a base class that you'll be able to use for multiple triggers.
Use this Base to generate your timers...
In your, App.config have a key for "FooTimer"
Use this FooTimer class in your webjob functions.
Now you can simply change the value in app config instead of redeploying the code. NOTE: Since you are using Timespan to parse, the string can be of any format you need as defined in TimeSpan formats.
UPDATE
As pointed by l--''''''---------'''''''''''' and Andy Dobedoe now (as of 2019) it is much simpler to achieve this.
public static async Task RunAsync([TimerTrigger("%MYCRON%")]TimerInfo myTimer
Finds the setting called MYCRON and uses the cron expression from there